将带有两个分隔符的字符串分解为数组

问题描述 投票:0回答:6

我正在尝试从字符串构建一个二维数组。该字符串具有以下结构:

$workers = "name1:age1/name2:age2/name3:age3";

这个想法是使用“/”作为分隔符将数组分解为“人”,然后使用“:”将每个“人”分解为包含“姓名”和“年龄”的数组。

我了解爆炸功能的基础知识:

$array = explode("separator", "$string");

但我不知道如何面对这个问题以使其成为二维的。

php multidimensional-array explode text-parsing
6个回答
1
投票

像下面这样的东西应该可以工作。目标是首先将数据分割成更小的块,然后逐步遍历每个块并根据需要进一步细分。

$row = 0;
foreach (explode("/", $workers) as $substring) {
    $col = 0;
    foreach (explode(":", $substring) as $value) {
        $array[$row][$col] = $value;
        $col++;
    }
    $row++;
}

1
投票
$array = array();
$workers = explode('/', "name1:age1/name2:age2/name3:age3");

foreach ($workers as $worker) {
    $worker = explode(':', $worker);
    $array[$worker[0]] = $worker[1];
}

1
投票

试试这个代码:

<?php
$new_arr=array();
$workers="name1:age1/name2:age2/name3:age3";
$arr=explode('/',$workers);
foreach($arr as $value){
   $new_arr[]=explode(':',$value);
}
?>

1
投票

快速解决方案是

$results = [];
$data    = explode("/", $workers);
foreach ($data as $row) {
    $line = explode(":", $row);
    $results[] = [$line[0], $line[1]];
}

您还可以将 array_walk 与自定义函数一起使用,为您进行第二级拆分。


1
投票

这是另一种方法,不是多维的:

parse_str(str_replace(array(':','/'), array('=','&'), $workers), $array);
print_r($array);

PHP >= 5.4.0 更短:

parse_str(str_replace([':','/'], ['=','&'], $workers), $array);
print_r($array);

1
投票

另一种方法,因为你没有真正给出“二维”含义的例子......

$workers="name1:age1/name2:age2/name3:age3";
parse_str(rtrim(preg_replace('~name(\d+):([^/]+)/?~','name[$1]=$2&',$workers),'&'),$names);

输出:

Array
(
    [name] => Array
        (
            [1] => age1
            [2] => age2
            [3] => age3
        )

)
© www.soinside.com 2019 - 2024. All rights reserved.