Php 如何使用密钥从多维数组中检索深层子数组?
我有下面的数组,并试图从Php 如何使用密钥从多维数组中检索深层子数组?,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我有下面的数组,并试图从$array变量中获取名为“Summary”的键的值 ["Rows"]=> array(1) { ["Row"]=> array(1) { [0]=> array(1) { ["Rows"]=> array(1) { ["Row"]=> array(1) { [0]=> array(1) { [
$array
变量中获取名为“Summary”的键的值
["Rows"]=>
array(1) {
["Row"]=>
array(1) {
[0]=>
array(1) {
["Rows"]=>
array(1) {
["Row"]=>
array(1) {
[0]=>
array(1) {
["Rows"]=>
array(1) {
["Row"]=>
array(1) {
[0]=>
array(1) {
["Summary"]=>
array(1) {
["ColData"]=>
array(2) {
[0]=>
array(1) {
["value"]=>
string(19) "Some Value"
}
[1]=>
array(1) {
["value"]=>
string(7) "2001.00"
}
}
}
}
}
}
}
}
}
}
}
}
我试着跟着
array_map(function ($ar) {return $ar['Summary'];}, $array);
但是没有成功
我做错了什么?这里有三个选项:
function searchArray($needle, $haystack, &$matched = null)
{
if (is_array($haystack) && count($haystack) > 0) {
foreach ($haystack as $key => $value) {
if ((string)$key === (string)$needle) {
if (is_array($value)) {
$matched = $value;
} else {
$matched[] = $value;
}
} else {
if (is_array($value) && count($value) > 0) {
self::searchArray($needle, $value, $matched);
}
}
}
}
return true;
}
searchArray('Summary', $yourArray, $found);
var_dump($found);
()
您可以使用如下简单的递归函数:
代码#1:
或者,您可以直接访问所需的子阵列,而无需使用任何函数调用。您只需要命名每个键(假设结构是静态的)
代码#2:
要利用关于数组结构的假设,可以实现一个递归过程,该过程在每次迭代中“跳跃”级别:
代码#3:
输出(来自上述任何方法):
array\u map
不会比第一层更深,这是肯定的all@u_mulder编辑了这个问题。请帮助。我建议使用array\u walk\u recursive
,如果我有时间,我会给你一个片段,但是检查@scosuarray\u walk\u recursive()
只会迭代数组的“叶节点”,在这种情况下不起作用。@在找到摘要之前可能有动态行。
function recursive($array){
if(key($array)!=='Summary'){
return recursive(current($array));
}
return current($array);
}
var_export(recursive($array));
$array=[
'Rows'=>[
'Row'=>[
[
'Rows'=>[
'Row'=>[
[
'Rows'=>[
'Row'=>[
[
'Summary'=>[
'ColData'=>[
['value'=>'Some Value'],
['value'=>'2001.00']
]
]
]
]
]
]
]
]
]
]
]
];
var_export($array['Rows']['Row'][0]['Rows']['Row'][0]['Rows']['Row'][0]['Summary']);
function recursive_jumper($array){
if(key($array)!=='Summary'){
return recursive_jumper($array['Rows']['Row'][0]);
}
return current($array);
}
var_export(recursive_jumper($array));
array (
'ColData' =>
array (
0 =>
array (
'value' => 'Some Value',
),
1 =>
array (
'value' => '2001.00',
),
),
)