【问题标题】:How to use portion of an array in loop?如何在循环中使用数组的一部分?
【发布时间】:2017-01-12 12:06:30
【问题描述】:

我有一个数组:

$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
    }
}

有没有更好、更高效的方法?

【问题讨论】:

  • 您可以使用带有固定索引的 for 循环
  • @patryk-uszynski 你能举出例子吗?
  • patryk-uszynski、NN 和 arkascha 的答案都可以,但我认为 patryk-uszynski 最适合这个例子!

标签: php arrays foreach


【解决方案1】:

您问题中的数组具有数字索引,因此您可以使用for 循环。然后只处理指定范围内的键。当您使用foreach 时,所有元素都会。

范围

的示例
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
    }
    

    仅使用 10 个偏移量为 50 的条目,到元素 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

    【讨论】:

      【解决方案3】:

      使用数组切片

       array_slice($array, 50, 100);
      

      【讨论】:

      • 欢迎@TrondroMulligan
      【解决方案4】:
      foreach ($array as $key => $value)
      {
          if ($key < 50 OR $key > 101)
          {
              continue;
          }
      }
      

      【讨论】:

      • 我不会还在循环 100 个键吗?
      • 是的,因为foreach 正如所说,总是会遍历数组的所有元素。
      • 如果你只想循环这些值,那么你应该像这样使用 array_slice($array, 50, 100);
      • @YasarArafath 使用 OR 时要非常小心。它的行为可能不像你想象的那样。详情请阅读stackoverflow.com/questions/2803321/and-vs-as-operator。在您的回答中,它会起作用。如果您要分配值,它可能会变得非常混乱。
      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多