21

是否有一种简单的方法可以在 PHP 中迭代此结构的关联数组:

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

以一种很好、整洁和易于理解的方式来做这件事的想法?

4

7 回答 7

43

嵌套两个foreach循环

foreach ($array as $i => $values) {
    print "$i {\n";
    foreach ($values as $key => $value) {
        print "    $key => $value\n";
    }
    print "}\n";
}
于 2008-08-25T13:24:28.990 回答
41

我知道这是死灵法问题,但是使用 Spl 迭代器迭代多维数组很容易

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

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

于 2010-01-27T17:49:28.253 回答
16

看起来是递归函数的好地方,尤其是。如果你有两个以上的深度。

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
    }
}
于 2008-10-07T07:22:10.977 回答
5

您应该能够使用嵌套的 foreach 语句

来自php 手册

/* 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\n";
    }
}
于 2008-08-25T13:21:48.717 回答
0

您可以遍历所有“part[n]”项目并使用 isset 来查看它们是否真的存在吗?

于 2008-08-25T13:21:51.137 回答
0

我真的不确定你在这里的意思 - 一对 foreach 循环肯定能满足你的需要吗?

foreach($array as $id => $assoc)
{
    foreach($assoc as $part => $data)
    {
        // code
    }
}

或者你需要一些递归的东西吗?我可以在示例数据和您希望如何返回数据的上下文方面提供更多帮助。

于 2008-08-25T13:26:53.713 回答
0

考虑这个多维数组,我希望这个函数会有所帮助。

$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
    }

}
于 2012-10-05T22:51:33.433 回答