php 按位置而不是数字键获取数组元素

php get array element by position instead of numeric key

我有一个脚本可以根据父子关系和每个给定的显示顺序对输入进行排序。一个简化的数组可能看起来像这样(实际数组也有子数组)

$output = Array
(
    [7] => first array
    [3] => second array
    [1] => last array
)

其中键是输入对应的id。现在我希望在 while 循环中从上到下遍历这个数组。我没有使用 foreach 因为如果它有子元素应该一起处理,而不是在下一个 'loop'.

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?

中的顺序传递此数组

您可以使用 array_keys 按排序顺序获取键,并循环访问这些键。 或者也可以用array_values,那么就可以顺序索引了。一开始就做好。

function recursivefunction( $array ) {
    $array = array_values($array);
    ....
}

我不确定为什么一个条目有 children 意味着下一个条目也一样,但我假设 foreach 有问题。

作为,你可以用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++可以让你跳过一个元素

由于 $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 以获得更好的性能