遍历PHP中的复杂关联数组

时间:2020-03-05 18:42:48  来源:igfitidea点击:

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

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

我们是否有想法以一种很好,整洁且易于理解的方式来执行此操作?

解决方案

回答

我们应该可以使用嵌套的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";
    }
}

回答

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

回答

嵌套两个foreach循环:

foreach ($array as $i => $values) {
    print "$i {\n";
    foreach ($values as $key => $value) {
        print "    $key => $value\n";
    }
    print "}\n";
}

回答

我真的不确定意思,这肯定是我们需要的一对foreach循环吗?

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

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

回答

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

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

回答

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

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

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

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