通过可以是平面或多维的阵列简化循环

时间:2010-09-15 13:17:34

标签: php arrays loops multidimensional-array

通常,我将拥有一个包含一组值的数组,每个值都需要处理。有时,数组只会包含一个集合,在这种情况下,每个值都需要通过该过程。其他时候,数组将保存多个集合,在这种情况下,每个值都将是一个数组,并且需要处理这些数组的每个值。这是一个例子:

foreach($array as $key => $value) {
    if(is_array($value)) {
        foreach($value as $subkey => $subvalue) {
            //Process $subvalue here    
        }
    }
    else {
        //Process $value here
    }
}

问题是处理$ value / $ subvalue的代码是相同的,只不过它在不同的变量上运行。简化这种方法的一种方法是将该代码放入一个函数中,但它仍然看起来不够优雅,必须调用它两次。此外,这将在该函数之外留下相当多的代码(foreach循环和数组测试)。例如,假设该过程是验证,我不想在我想调用验证函数时编写两个foreach循环和一个数组测试。

有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用RecursiveArrayIterator来迭代数组中的值,例如

$iterator = new RecursiveIteratorIterator(
                new RecursiveArrayIterator($yourArray),
                RecursiveIteratorIterator:SELF_FIRST);

然后只需foreach就可以了。进一步阅读:

答案 1 :(得分:1)

将单个值包装到数组中,然后照常进行:

foreach($array as $key => $value) {

    if(!is_array($value)) $value = array($value);

    foreach($value as $subkey => $subvalue) {
        //Process $value/$subvalue here    
    }
}

或者,您可以创建一个处理单个项目的函数,然后从每个分支调用相同的函数。你最终还是会保存两次写入过程。