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

php通过位置而不是数字键获取数组元素,php,arrays,position,key,Php,Arrays,Position,Key,我有一个脚本,它根据父子关系和每个关系的给定显示顺序对输入进行排序。一个简化的数组可能是这样的(实际数组也有子数组) 其中键是输入的对应id。现在我希望在while循环中从上到下通过这个数组。我没有使用foreachforeach,因为如果它有子元素,那么多个元素应该一起处理,而不会在下一个“循环”中再次出现 function recursive_func($array){ while ($i<=count($array)){ if (isset($array[$i

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

其中键是输入的对应id。现在我希望在
while
循环中从上到下通过这个数组。我没有使用foreach
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){

而($iSomething您可以使用数组_键按排序顺序获取键,并迭代这些键。 或者也可以使用数组_值,然后可以按顺序索引。只需从一开始就正确地执行即可

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

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

您可以使用array\u键按排序顺序获取键,并遍历这些键。 或者也可以使用数组_值,然后可以按顺序索引。只需从一开始就正确地执行即可

function recursivefunction( $array ) {
    $array = array_values($array);
    ....
}
我不知道为什么一个条目有子条目意味着下一个条目也有子条目,但我假设foreach是有问题的。

就像这样,你可以用
数组键()来解决这个问题

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!
        }
    }
}
函数递归函数($array){
$keys=数组\ U键($array);
对于($i=0;$iAs,您可以像这样使用
array\u 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!
        }
    }
}
函数递归函数($array){
$keys=数组\ U键($array);

对于($i=0;$i),由于$output键没有顺序,一种方法是执行以下操作:

首先获取所有数组键:

$keys=array_keys($output);
接下来,您可以调用递归函数($keys,$output):

函数递归函数($keys,$output){
$size=计数($key);
$i=0;

由于$output键不按顺序排列,$iSomething,一种方法是执行以下操作:

首先获取所有数组键:

$keys=array_keys($output);
接下来,您可以调用递归函数($keys,$output):

函数递归函数($keys,$output){
$size=计数($key);
$i=0;


虽然($Isomething)我不明白为什么不能使用foreach()它会解决这个问题easily@Dagon我知道。但是如果一行有子行,它就是一列,下一行是第二列。这两行应该被包装在一个。一个while循环允许我运行div中的两个数组,然后只“跳过”循环中的下一行。仍然可以通过foreachI进行操作。我对答案感兴趣(我自己也在做一个foreach。)请将你的解决方案作为答案张贴出来。我不明白你为什么不能使用foreach()它会解决这个问题easily@Dagon我知道。但是如果一行有子行,它就是一列,下一行是第二列。这两行应该被包装在一个。一个while循环允许我运行div中的两个数组,然后只“跳过”循环中的下一行。仍然可以通过foreachI进行操作。我对答案感兴趣(我自己正在做一个foreach)。请将您的解决方案作为答案发布。根据输入的数据,我可以确定一行有子项,意味着下一行也有子项。我不能使用数组值,因为我会丢失id。但是,数组键可能有用,但会使问题更复杂。有些人在只显示数组值时否决了您的帖子……这种方法可能会奏效k、 它只说了array_key…这正是你需要的。array_key确实是我从输入的数据中需要的。我可以肯定,一行有子项,意味着下一行也有子项。我不能使用array_值,因为我会丢失id。然而,array_key可能有用,但会使它更复杂。当我不仅仅是说array_值…这个方法可能会起作用。它只说array_键…这正是您所需要的。array_键确实是我所需要的,除了递归调用没有传递正确的内容。对于递归调用,您需要传递$keys数组和$outputarray@Pepe如果在循环外部设置
$size
,则仅计算一次。但是,如果您在条件内设置,则需要在每次迭代中计算它。您只会感受到大型数组的差异,尽管@Pepe所说的完全不同。如果您将$size放在循环之外,它只需要计算$size一次,而不是多次。我想对于“for”循环也是如此?除了递归ive调用没有传递正确的内容。对于递归调用,需要传递$keys数组和$outputarray@Pepe如果在循环外设置
$size
,则只计算一次。但是,如果在条件内设置,则需要在每次迭代时计算。您只会感觉到大型数组与这正是@Pepe所说的。如果你把$size放在循环之外,它只需要计算$size一次,而不是多次。我想对于“for”循环也是这样吧?