我有一个脚本,它根据父子关系和每个的给定显示顺序对输入进行排序。简化的数组看起来像这样(实际的数组也有子数组)
$output = Array
(
[7] => first array
[3] => second array
[1] => last array
)
其中键是输入的对应id。现在我想在while
循环中从上到下传递这个数组。我没有使用foreach
,因为如果它有子节点,则应该一起处理多个元素,而不是在下一个“循环”中再次出现。
function recursive_func($array){
while ($i<=count($array)){
if (isset($array[$i]['children'])){
?><div><?php
recursive_function($array[$i]['children']);
$i++;
recursive_function($array[$i]['children']);
$i++;
?></div><?php
}
else{
?><div>Something</div><?php
$i++;
}
}
}
显然$array[$i]['children']
不是第i个元素的子元素(按位置),而是具有值i的键。
如何按照$output
中的顺序传递此数组?
答案 0 :(得分:1)
您可以使用array_keys按排序顺序获取密钥,并迭代这些密钥。 或者也可以使用array_values,然后你可以顺序索引。一开始就做好。
function recursivefunction( $array ) {
$array = array_values($array);
....
}
我不确定为什么一个有孩子的条目意味着下一个也是如此,但我认为foreach是有问题的。
答案 1 :(得分:1)
由于$ output键不合规,一种方法是执行以下操作:
首先获取所有数组键:
$keys=array_keys($output);
接下来,您可以调用recursive_func($ keys,$ output):
function recursive_func($keys,$output){
$size=count($keys);
$i=0;
while ($i<=$size){
if (isset($output[$i]['children'])){
?><div><?php
$a=$output[$i]['children'];
recursive_function(array_keys($a),$a);
$i++;
$a=$output[$i]['children'];
recursive_function(array_keys($a),$a);
$i++;
?></div><?php
}
else{
?><div>Something</div><?php
$i++;
}
}
}
请注意,最好在循环外设置数组的$ size以获得更好的性能
答案 2 :(得分:0)
作为Garr Godfrey suggested,您可以使用array_keys()
解决此问题
function recursive_func($array){
$keys = array_keys($array);
for ($i=0; $i<count($keys); $i++) {
if (isset($array[ $keys[$i] ]['children'])) {
recursive_func($array[ $keys[$i] ]['children']);
$i++;
recursive_func($array[ $keys[$i] ]['children']);
} else {
//sth, no $i++ here!
}
}
}
因为我在这里使用for
循环,循环中的$i++
将使您可以跳过一个元素