我已经苦苦挣扎了几天,想把它扔出去看看是否有人有任何想法。
基本上我有一个字符串,例如
1) "/0/bar"
2) "/build/0/foo/1"
并需要将其转换为多维数组
1) $result[0][bar]
2) $result[build][0][foo][1]
到目前为止,我已经尝试过:
$query = "/build/0/foo/1";
$queryAr = [];
$current = &$queryAr;
$keys = explode("/", $query);
foreach($keys as $key) {
@$current = &$current[$key];
}
$current = $value;
平息输出是实现这一目标的一种非常黑客的方式......
你需要修剪字符串的第一个/
。 live demo。
<?php
$query = "/build/0/foo/1";
$queryAr = [];
$current = &$queryAr;
$keys = explode("/", trim($query, '/'));
foreach($keys as $key) {
@$current = &$current[$key];
}
$current = $value;
print_r($queryAr);
我尝试了一个递归函数版本:
$query = "/build/0/foo/1";
print_r($result = buildNestedArray(explode('/', trim($query, '/'))));
function buildNestedArray($keys)
{
$k = current($keys);
$result = [$k => 'DONE'];
array_shift($keys);
if (sizeof($keys) > 0) { $result[$k] = buildNestedArray($keys); }
return $result;
}
输出:Array ( [build] => Array ( [0] => Array ( [foo] => Array ( [1] => DONE ) ) ) )