PHP - 按索引循环

时间:2013-02-14 15:00:13

标签: php arrays loops indexing

我使用PHP并拥有一个如下所示的数组:

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

我还需要循环设置,键34带值,键33带值。我可以用foreach循环它们但在我的情况下我不能使用foreach循环。

问题 - 按索引循环?

因为在我的情况下我不能使用foreach循环,所以我需要提出一些可以通过索引循环它们的东西。

我自己的想法

如果我可以通过索引获取数组键,那就没问题了。有可能,怎么样?

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

原因

我不能使用foreach的原因是我依赖于计数器。如果计数器显示3它想要获得第四个键(数组从0开始)。

示例1

$counter = 1;

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

示例2

$counter = 0;

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

3 个答案:

答案 0 :(得分:1)

解决方案

使用array_keys从数组中取出密钥,然后使用计数器查找要迭代的索引。然后,您可以使用简单的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。现在,它很简单,可以在原始数组上使用$index来获取我们想要迭代的子数组。

$subArray = $array[$index];

在此示例中$counter0,变量$subArray现在成立

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

不使用foreach

在没有foreach循环的情况下,将此答案适应工作非常简单。阅读array_keys文档并考虑该函数如何允许其他类型的循环使用字符串键迭代数组。

参考

array_keys documentation

答案 1 :(得分:1)

  

我不能使用foreach的原因是我依赖于计数器。如果计数器显示3它想要获得第四个键(数组从0开始)。

没问题:

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

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

对于PHP 5.3或更早版本:

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

答案 2 :(得分:1)

这可能就是你要找的......

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

print_r( $my_array[ $needed_entry ] );