0

我使用 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 上。

4

3 回答 3

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 文档

于 2013-02-14T15:09:35.557 回答
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]]);
于 2013-02-14T15:09:46.797 回答
1

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

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

print_r( $my_array[ $needed_entry ] );
于 2013-02-14T15:11:52.900 回答