#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;
}
Комментарии:
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, чтобы показать метод, в котором у вас есть возможность что-то сделать с элементом, прежде чем отбросить его.