在 PHP 中跳过数组键的范围内的关键索引

3

这仅适用于带有索引数字的数组。例如,我有以下数组;

$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或首先搜索数组键?尽管上面的代码看起来很好,但是如果我有一堆数组键和值,我认为这不是一个好选择。

为什么不直接从6开始你的for循环呢? for($ind = 6; $ind < count($array); $ind++){ 这样你就不需要在循环中进行任何检查了。 - Nick
@Nick 嗯,那是正确的,但我需要按照这种方式进行,而不是从6开始循环,因为这只是更大情况下的基本情况,所以我需要知道如何跳过某个索引范围的基本方法。 - Gagantous
1
使用array_key_exists可能相当低效。使用if ($ind >= 0 && $ind <= 5) continue;会更快。但是...如果不了解您尝试做什么的真实复杂性(您提到“一堆数组键和值”),很难提供一个好的解决方案。 - Nick
1
使用 array_diff 然后循环输出怎么样? - dWinder
如果你想要跳过数组中的任意一段键(不一定是从数组开头或结尾开始),最好的选择是使用print_r(array_diff_key($array, array_flip(range(3,5)))); - Agnius Vasiliauskas
2个回答

2
你可以使用 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)));

1
哦,这很不错!但我会等待另一个答案,感谢回答! - Gagantous

1
你可以从第5个索引开始获取数组的片段,直到最后。
$result = array_slice($array,5,count($array)-5, true);

array_slice — 提取数组的一部分

注意:

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

演示


有没有办法使索引号不再从0重新排序? - Gagantous
不好意思,伙计。我没有理解你刚才说的话。 - Rahul
抱歉,我的意思是,您的答案将值“6”保留,并重新按照索引“0”重新排序其余部分的索引键。是否可能保留旧的索引键?因此,值“6”仍然具有其键的“5”。 - Gagantous
1
是的,这是可能的,将true作为最后一个参数传递。请检查我的更新答案。 - Rahul
不客气,伙计!顺便说一下,我更新了我的答案,并加上了一个关于array_slice行为的注释,以便更好地理解。感谢你的编辑。 - Rahul
@Gagantous,你应该可以传递null作为第三个参数,并省略对count()的额外调用。如果长度参数为null,则它将包括数组的其余部分。 - miken32

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