考虑任意形式的关联数组和嵌套深度,例如:
$someVar = array(
'name' => 'Dotan',
'age' => 35,
'children' => array(
0 => array(
'name' => 'Meirav',
'age' => 6,
),
1 => array(
'name' => 'Maayan',
'age' => 4,
)
),
'dogs' => array('Gili', 'Gipsy')
);我想将其转换为路径和值的关联数组:
$someVar = array(
'name' => 'Dotan',
'age' => 35,
'children/0/name' => 'Meirav',
'children/0/age' => 6,
'children/1/name' => 'Maayan',
'children/1/age' => 4,
'dogs/0' => 'Gili',
'dogs/1' => 'Gipsy'
);我开始编写一个递归函数,用于数组元素将递归,而对于非数组元素(int、floats、bools和string)返回数组$return['path']和$return['value']。这很快就变得草率了!是否有更好的方法在PHP中实现?--我假设数组中不会传递可调用对象和对象,尽管处理这种可能性的任何解决方案都是最好的。另外,我假设输入数组不会在元素名中包含/字符,但是考虑到这一点可能是谨慎的!注意到输入数组可以嵌套到深度达8个或更深的层次!!
发布于 2013-06-19 15:20:18
递归实际上是您能够处理此问题的唯一方法,但下面是一个简单的版本:
function nested_values($array, $path=""){
$output = array();
foreach($array as $key => $value) {
if(is_array($value)) {
$output = array_merge($output, nested_values($value, (!empty($path)) ? $path.$key."/" : $key."/"));
}
else $output[$path.$key] = $value;
}
return $output;
}发布于 2013-06-19 15:20:14
function getRecursive($path, $node) {
if (is_array($node)) {
$ret = '';
foreach($node as $key => $val)
$ret .= getRecursive($path.'.'.$key, $val);
return $ret;
}
return $path.' => '.$node."\n";
}
$r = getRecursive('', $someVar);
print_r($r);把它放在一个数组里。
https://stackoverflow.com/questions/17194649
复制相似问题