我正在尝试从字符串构建一个二维数组。该字符串具有以下结构:
$workers = "name1:age1/name2:age2/name3:age3";
这个想法是使用“/”作为分隔符将数组分解为“人”,然后使用“:”将每个“人”分解为包含“姓名”和“年龄”的数组。
我了解爆炸功能的基础知识:
$array = explode("separator", "$string");
但我不知道如何面对这个问题以使其成为二维的。
像下面这样的东西应该可以工作。目标是首先将数据分割成更小的块,然后逐步遍历每个块并根据需要进一步细分。
$row = 0;
foreach (explode("/", $workers) as $substring) {
$col = 0;
foreach (explode(":", $substring) as $value) {
$array[$row][$col] = $value;
$col++;
}
$row++;
}
$array = array();
$workers = explode('/', "name1:age1/name2:age2/name3:age3");
foreach ($workers as $worker) {
$worker = explode(':', $worker);
$array[$worker[0]] = $worker[1];
}
试试这个代码:
<?php
$new_arr=array();
$workers="name1:age1/name2:age2/name3:age3";
$arr=explode('/',$workers);
foreach($arr as $value){
$new_arr[]=explode(':',$value);
}
?>
快速解决方案是
$results = [];
$data = explode("/", $workers);
foreach ($data as $row) {
$line = explode(":", $row);
$results[] = [$line[0], $line[1]];
}
您还可以将 array_walk 与自定义函数一起使用,为您进行第二级拆分。
这是另一种方法,不是多维的:
parse_str(str_replace(array(':','/'), array('=','&'), $workers), $array);
print_r($array);
PHP >= 5.4.0 更短:
parse_str(str_replace([':','/'], ['=','&'], $workers), $array);
print_r($array);
另一种方法,因为你没有真正给出“二维”含义的例子......
$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
)
)