PHP切片范围通过键而不是索引

问题描述 投票:-1回答:3

我有一个如下所示的数组:

$array = [
  1000 => 'something',
  2000 => 'something',
  10000 => 'something',
  20000 => 'something',
  300000 => 'something',
];

假设我想获得200020000之间的间隔。我需要循环还是有更好的方法?

这不是索引,因此在这种情况下不能使用切片。

我希望的是

我可以自己循环执行此操作,但希望有一些更聪明的方法。

$range = getRange(2000, 20000, $array);
print_r($range);

输出

$range = [
  2000 => 'something',
  10000 => 'something',
  20000 => 'something',
];
php arrays range intervals
3个回答
1
投票
function getRange($start,$end, $array){
  $dataArray= array();
  foreach($array as $key=>$value){

    if($key>=$start && $key<=$end){
       $dataArray[$key]= $value;
     }
  }
 return $dataArray; 
}

您将需要遍历数组并手动执行。即使有任何内置函数可以迭代结果。简而言之,您将始终需要遍历数据集,并且始终具有O(N)的复杂度。


1
投票

array_filter可以根据值键进行过滤...

function getRange($min, $max, $array) {
  return array_filter($array, function($key) use ($min, $max) {
    return $key >= $min && $key <= $max;
  }, ARRAY_FILTER_USE_KEY ); // flag to pass the key into the callback function
}

0
投票

array_splice是解决方案。但是array_splice的问题是密钥永远不会保留。查看此解决方案array_splice preserving keys

© www.soinside.com 2019 - 2024. All rights reserved.