通常,我将拥有一个包含一组值的数组,每个值都需要处理。有时,数组只会包含一个集合,在这种情况下,每个值都需要通过该过程。其他时候,数组将保存多个集合,在这种情况下,每个值都将是一个数组,并且需要处理这些数组的每个值。这是一个例子:
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循环和一个数组测试。
有更简单的方法吗?
答案 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
}
}
或者,您可以创建一个处理单个项目的函数,然后从每个分支调用相同的函数。你最终还是会保存两次写入过程。