PHP диапазон срезов по ключам, а не по индексу - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть массив, который выглядит следующим образом:

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

Допустим, я хочу получить интервал между 2000 и 20000. Нужно ли мне l oop или есть лучший способ?

Это не индекс, поэтому я не могу использовать слайс в этом случае.

То, на что я надеюсь

Я мог бы сделать это сам с oop, но, надеюсь, есть что-то более умное.

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

Вывод

$range = [
  2000 => 'something',
  10000 => 'something',
  20000 => 'something',
];

Ответы [ 3 ]

3 голосов
/ 03 февраля 2020

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
}
2 голосов
/ 03 февраля 2020
function getRange($start,$end, $array){
  $dataArray= array();
  foreach($array as $key=>$value){

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

Вам нужно будет перебрать массив и сделать это вручную. Даже если есть какая-либо встроенная функция, которая будет перебирать результат. Короче говоря, вам всегда нужно будет go через набор данных, и вы всегда будете иметь сложность O (N).

0 голосов
/ 03 февраля 2020

array_splice является решением для этого. Но проблема с array_splice в том, что ключи никогда не сохранятся. Проверьте это для решения array_splice сохраняющих ключи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...