如何在循环中使用数组的一部分?

3

我有一个数组:

$array = array();
$array[0] = "string";
$array[1] = "string1";
$array[2] = "string2";
$array[3] = "string3";
...
$array[99] = "string99";
$array[100] = "string100";

如果我想要处理数组中的所有值:
foreach ($array as $key => $value)
{
    // Do something with the value
}

根据条件,我可能只需要处理数组的一部分(例如50-100)。如何从数组中提取50-100个键?

有一种方法,但似乎效率不高:


foreach ($array as $key => $value)
{
    if ($key > 49)
    {
        // Do something with the value
    }
}

有没有更好、更高效的方法来做这件事?

1
你可以使用固定索引的for循环。 - Patryk Uszyński
@patryk-uszynski 你能展示一些例子吗? - Trondro Mulligan
2
patryk-uszynski、NN和arkascha的答案都可以,但我认为patryk-uszynski的最适合这个例子! - Ben Hillier
4个回答

3

你所提到的数组有数字索引,因此可以使用 for 循环。那么只有指定范围内的键才会被处理。而当你使用 foreach 时,所有元素都会被处理。

例如范围 <50,100> 的示例:

for($i=50; $i<=100; $i++) {
    //do something with $array[$i]
}

其他所有按键都不会被处理。您还可以使用像array_slice()这样的函数,但效率不会那么高。


2

对于此类问题,PHP 提供了函数 array_slice()

以下是一个示例,仅使用键值大于等于 50 的元素:

foreach (array_slice($array, 50) as $key => $value) {
    // Do something with the value
}

仅使用偏移量为50的10个条目,获取元素50-60:

foreach (array_slice($array, 50, 10) as $key => $value) {
    // Do something with the value
}

该函数允许您指定数组的长度和可选偏移量,以获取数组的一部分结果。
请参阅文档:http://php.net/manual/en/function.array-slice.php

0
使用数组切片
 array_slice($array, 50, 100);

欢迎 @TrondroMulligan - Nishant Nair

0
foreach ($array as $key => $value)
{
    if ($key < 50 OR $key > 101)
    {
        continue;
    }
}

我难道不仍然会循环遍历这100个键吗? - Trondro Mulligan
是的,因为正如所说的那样,foreach 循环将始终遍历数组的所有元素。 - Patryk Uszyński
如果你只想循环那些值,那么你应该像这样使用: array_slice($array, 50, 100); - Yasar Arafath
1
@YasarArafath 在使用 OR 时要非常小心。它可能不会按照你想象的那样运行。请阅读 https://dev59.com/aHE85IYBdhLWcg3wYicB 了解详情。虽然在你的答案中它可以工作,但如果你正在分配值,它可能会变得非常混乱。 - dokgu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接