猿问

PHP 切片范围按键而不是按索引

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


$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',

];


HUWWW
浏览 120回答 3
3回答

梦里花落0921

array_filter可以根据值或键进行过滤...function getRange($min, $max, $array) {&nbsp; return array_filter($array, function($key) use ($min, $max) {&nbsp; &nbsp; return $key >= $min && $key <= $max;&nbsp; }, ARRAY_FILTER_USE_KEY ); // flag to pass the key into the callback function}

Cats萌萌

function getRange($start,$end, $array){&nbsp; $dataArray= array();&nbsp; foreach($array as $key=>$value){&nbsp; &nbsp; if($key>=$start && $key<=$end){&nbsp; &nbsp; &nbsp; &nbsp;$dataArray[$key]= $value;&nbsp; &nbsp; &nbsp;}&nbsp; }&nbsp;return $dataArray;&nbsp;}您将需要循环访问数组并手动执行此操作。即使有任何内置函数将循环访问结果。简而言之,您将始终需要遍历数据集,并且您将始终具有O(N)的复杂性。

杨魅力

array_splice是此问题的解决方案。但问题是钥匙永远不会被保留。查看此内容,了解保留密钥array_splice解决方案array_splice
随时随地看视频慕课网APP
我要回答