【问题标题】:Skip key index from a range of array's key in php从 php 中的一系列数组键中跳过键索引
【发布时间】:2019-09-23 14:41:50
【问题描述】:

这仅适用于具有索引号的数组。例如我有这个数组;

$array = [
  "0" => "number 1",
  "1" => "number 2",
  "2" => "number 3",
  "3" => "number 4",
  "4" => "number 5",
  "5" => "number 6",
  "6" => "number 7",
  "7" => "number 8",
  "8" => "number 9"
];

我想跳过某些关键索引范围的循环,例如,如果索引的数量在 0 到 5 范围内,则跳过 foreach。这意味着我们可以这样做。

foreach($array as $key => $value){
   if(array_key_exist($key, range(0,5))
      continue;
   echo $value."<br/>"
}  

或者我们可以使用for...循环

for($ind = 0; $ind < count($array); $ind++){    
    if(array_key_exist($ind, range(0,5))
      continue;    
echo $arr[$ind]."<br/>" 
}

如何在不使用 continue 或先搜索 array_key 的情况下跳过索引?确定上面的代码对我来说看起来不错,但是如果我有一堆数组键和值,我认为这不是一个好的选择。

【问题讨论】:

  • 为什么不在 6 点开始你的 for 循环呢? for($ind = 6; $ind &lt; count($array); $ind++){ 那么你根本不需要检查循环。
  • @Nick 很好,这是正确的,但我需要这样做,而不是从 6 开始循环,因为这只是更大情况的基本情况,所以我需要知道基本的如何跳过特定范围索引的循环。
  • 使用array_key_exists 效率很低。使用if ($ind &gt;= 0 &amp;&amp; $ind &lt;= 5) continue; 会更快。但是......如果没有看到你正在尝试做的事情的真正复杂性(你提到“一堆数组键和值”),很难提供一个好的解决方案。
  • 使用array_diff 然后循环输出怎么样?
  • 如果你想跳过任意范围的键{不需要从数组的开头或结尾},最好的选择是使用print_r(array_diff_key($array, array_flip(range(3,5))));

标签: php arrays for-loop foreach


【解决方案1】:

您可以将array_diff 用作:

$wantKeys = array_diff(array_keys($array), range(1,5));

现在您只需要在$wantKeys 上循环:

foreach($wantKeys as $k) 
    echo $array[$k]; // only wanted values 

array_diff_keys也可以实现同样的想法:

$wantKeys = array_diff_key($array, array_flip(range(1,5)));

【讨论】:

  • 哦,这很好!但我会等待另一个答案,谢谢你的回答!
【解决方案2】:

您可以从第 5 个索引处获取数组切片,

$result = array_slice($array,5,count($array)-5, true);

array_slice — 提取数组的一个切片

注意

array_slice() 将重新排序并重置整数数组索引 默认。可以通过将 preserve_keys 设置为来更改此行为 真的。无论此参数如何,始终保留字符串键。

Demo.

【讨论】:

  • 有没有办法让索引号不再从0重新排序?
  • 请原谅,伙计。但我没听懂,你刚才说什么
  • 对不起,我的意思是,您的回答使值 number 6 和其余的索引键从索引 0 重新排序。是否可以保留旧的索引键?所以值 number 6 仍然有 5 作为它的键。
  • 是的,它可能,将 true 作为最后一个参数传递。检查我的更新答案
  • 欢迎您的伙伴!仅供参考,我用 array_slice 行为的注释更新了我的答案,以便更好地理解。感谢您的编辑。
猜你喜欢
  • 2014-09-10
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多