代码之家  ›  专栏  ›  技术社区  ›  Jens Törnell

PHP-按索引循环

  •  0
  • Jens Törnell  · 技术社区  · 13 年前

    我使用PHP,有一个数组,它看起来像这样:

    Array
    (
        [34] => Array
        (
            [slug] => my_slug
            [title] => my_title
        )
        [33] => Array
        (
            [slug] => my_slug2
            [title] => my_title2
        )
    )
    

    我还需要循环出集合,键34包含值,键33包含值。我可以用前臂将它们循环出来,但在我的情况下,我不能用前臂循环。

    问题-按索引循环?

    因为我不能在我的情况下使用foreach循环,所以我需要想出一些可以按索引循环的方法。

    我自己的想法

    如果我能通过索引获得数组键,那就好了。这可能吗,怎么可能?

    <?php print_r( $my_array[index][0] ); ?>
    <?php print_r( $my_array[index][1] ); ?>
    

    原因

    我不能使用前臂的原因是我依赖于计数器。如果计数器显示3,则它希望获得第四个密钥(数组以0开头)。

    示例1

    $counter = 1;
    

    然后它应该返回[33]的内容,因为它在索引1上。

    示例2

    $counter = 0;
    

    然后它应该返回[34]的内容,因为它在索引0上。

    3 回复  |  直到 13 年前
        1
  •  1
  •   Will    13 年前

    解决方案

    使用从数组中取出密钥 array_keys 然后使用来counter查找要迭代的索引。然后,您可以使用一个简单的foreach循环来迭代子数组。

    $keys     = array_keys($array);
    $index    = $keys[$counter];
    $subArray = $array[$index];
    foreach($subArray as $key => $value) {
        // do stuff
    }
    

    解释

    对于您在示例中给出的数组 array_keys($array) 退货

    array(
        0 => 34,
        1 => 33
    );
    

    因此,我们可以在这个新数组上使用counter来计算我们想要迭代的实际数组中的索引。

    $index = $keys[$counter];
    

    所以如果 $counter = 0 然后 $index 现在 34 。现在使用起来很简单 $指数 在原始数组上,以获得我们想要迭代的子数组。

    $subArray = $array[$index];
    

    在这个例子中 $counter 存在 0 变量 $subArray 现在持有

    array(
        'slug'  => 'my_slug'
        'title' => 'my_title'
    );
    

    不使用前臂

    在没有 foreach 环阅读 array_keys 文档,并思考该函数如何允许其他类型的循环在具有字符串键的数组上进行迭代。

    工具书类

    array_keys documentation

        2
  •  1
  •   Fabian Schmengler    13 年前

    我不能使用前臂的原因是我依赖于计数器。如果计数器显示3,则它希望获得第四个密钥(数组以0开头)。

    没问题:

    var_dump($array[array_keys($array)[3]]);
    

    (由于数组取消引用语法,这需要PHP 5.4)

    对于PHP 5.3或更早版本:

    $keys = array_keys($array);
    var_dump($array[$keys[3]]);
    
        3
  •  1
  •   alexbusu    13 年前

    也许这就是你想要的。。。

    $counter = 3; // for example
    $keys = array_keys($my_array);
    $needed_entry = $keys[ $counter ];
    
    print_r( $my_array[ $needed_entry ] );