遍历PHP中的复杂关联数组

遍历PHP中的复杂关联数组

Iterating over a complex Associative Array in PHP

有没有一种简单的方法可以遍历PHP中此结构的关联数组:

数组$searches具有编号索引,具有4到5个关联部分。 因此,我不仅需要遍历$searches[0]$searches[n],还需要遍历$searches[0]["part0"]$searches[n]["partn"]。 困难的部分是,不同的索引具有不同的部分数量(有些可能缺少一两个)。

您是否有想法以一种美观,整洁且易于理解的方式进行操作?


嵌套两个foreach循环:

1
2
3
4
5
6
7
8
9
10
foreach ($array as $i => $values) {
    print"$i {\
"
;
    foreach ($values as $key => $value) {
        print"    $key => $value\
"
;
    }
    print"}\
"
;
}

我知道这是问题的法术学,但是使用Spl迭代器可以很容易地遍历多维数组

1
2
3
4
5
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

foreach($iterator as $key=>$value) {
    echo $key.' -- '.$value.'<br />';
}

看到

  • http://php.net/manual/zh/spl.iterators.php

看起来特别适合使用递归函数。 如果您有两个以上的深度级别。

1
2
3
4
5
6
7
8
9
10
function doSomething(&$complex_array)
{
    foreach ($complex_array as $n => $v)
    {
        if (is_array($v))
            doSomething($v);
        else
            do whatever you want to do with a single node
    }
}

您应该可以使用嵌套的foreach语句

从PHP手册

1
2
3
4
5
6
7
8
9
10
11
12
13
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] ="a";
$a[0][1] ="b";
$a[1][0] ="y";
$a[1][1] ="z";

foreach ($a as $v1) {
    foreach ($v1 as $v2) {
        echo"$v2\
"
;
    }
}

考虑这个多维数组,希望此功能会有所帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$n = array('customer' => array('address' => 'Kenmore street',
                'phone' => '121223'),
      'consumer' => 'wellington consumer',
      'employee' => array('name' => array('fname' => 'finau', 'lname' => 'kaufusi'),
                     'age' => 32,
                 'nationality' => 'Tonga')
      );



iterator($n);

function iterator($arr){

    foreach($arr as $key => $val){

    if(is_array($val))iterator($val);

    echo '<p>
key: '
.$key.' | value: '.$val.'
</p>'
;

    //filter the $key and $val here and do what you want
    }

}

我真的不确定您的意思-当然需要一对foreach循环吗?

1
2
3
4
5
6
7
foreach($array as $id => $assoc)
{
    foreach($assoc as $part => $data)
    {
        // code
    }
}

还是您需要递归的东西? 我将能够通过示例数据和上下文为您提供更多帮助,以帮助您返回数据。


您可以仅遍历所有" part [n]"项并使用isset来查看它们是否确实存在吗?


推荐阅读