PHP как усечь массив

#php

#php

Вопрос:

Как наиболее эффективно обрезать массив PHP?

Должен ли я использовать array_splice?

Комментарии:

1. Чего вы хотите достичь? Приведите несколько примеров.

2. Почему такое отвращение к array_splice ?

3. Я прочитал результат объединения SQL и должен сбрасывать ассоциативный массив каждую 3-ю итерацию. Я думал, что здесь можно использовать count, как в некоторых языках, где вы устанавливаете длину массива равной 0…

4. Длина массива PHP — это просто метаданные. Это в основном доступно только для чтения. Чтобы повлиять на это, вы должны фактически добавлять / удалять элементы.

5. Должно быть, я действительно упускаю суть этого вопроса. Если вы хотите установить длину в 0, не будет ли это просто $result=array();

Ответ №1:

Вы можете использовать собственные функции для удаления элементов массива:

  • array_pop — извлекает элемент из конца массива
  • array_shift — сдвиг элемента от начала массива
  • array_slice — извлечь фрагмент массива
  • unset — удалить один элемент из массива

С этими знаниями создайте свою собственную функцию

 function array_truncate(array $array, $left, $right) {
    $array = array_slice($array, $left, count($array) - $left);
    $array = array_slice($array, 0, count($array) - $right);
    return $array;
}
  

Демо — http://codepad.viper-7.com/JVAs0a

Комментарии:

1. Питер, ты можешь объяснить, для чего $left и $right для каких параметров

2. @RahilWazir обрезать x $left элементов слева, обрезать x $right параметров справа

Ответ №2:

Да, если вы не хотите перебирать массив и удалять () ненужные элементы.

Комментарии:

1. Обратите внимание, что в foreach вам придется использовать полную ссылку на индекс массива, поскольку foreach использует копию массива. foreach($array as $key => $value ) { unset($array[$key] } нет foreach($array as $key => $value ) { unset($value) } . Второй просто сбрасывает копию.

Ответ №3:

Эта функция должна работать

 function truncateArray($truncateAt, $arr) {
    array_splice($arr, $truncateAt, (count($arr) - $truncateAt));
    return $arr;
}
  

Ответ №4:

Вы можете использовать одну из этих функций:

 function array_truncate(amp;$arr)
{
    while(count($arr) > 0) array_pop($arr);
}
// OR (faster)
function array_truncate2(amp;$arr)
{
    array_splice($arr, 0, count($arr));
}
  

Использование:

 $data2 = array("John" => "Doe", "Alice" => "Bob");
array_truncate($data2);
// OR
array_truncate2($data2);
  

Комментарии:

1. Цикл while , вероятно, был бы самым неэффективным способом усечения массива 🙂

2. @AlexanderFarber конечно, это так, вот почему я сказал (в комментарии), что другой быстрее. Я включил в метод array_pop, чтобы показать метод, в котором у вас есть возможность что-то сделать с элементом, прежде чем отбросить его.