Вот удобный способ:
while (reset($array) == '') array_shift($array);
while (end($array) == '') array_pop($array);
See it in action.
Обязательный комментарий: Я использую свободное сравнение с пустой строкой, потому что это похоже на то, что вы намереваетесь дать вашему примеру. Если вы хотите быть более разборчивы относительно того, какие элементы удалить, пожалуйста, настройте соответствующее условие.
Обновление: бонусная признак PHP уродливый код, который может быть быстрее
Мне пришло в голову, что если есть много в начале и в конце массива пустых элементов выше метод может быть не самым быстрым, потому что он удаляет их по одному, переиндексируя массив на каждом шаге и т. д. Итак, вот решение, которое работает для любого массива и выполняет обрезку всего за один шаг. Предупреждение: уродливый.
$firstNonEmpty = 0;
$i = 0;
foreach ($array as $val) {
if ($val != '') {
$firstNonEmpty = $i;
break;
}
++$i;
}
$lastNonEmpty = $count = count($array);
end($array);
for ($i = $count; $i > 0; --$i) {
if (current($array) != '') {
$lastNonEmpty = $i;
break;
}
prev($array);
}
$array = array_slice($array, $firstNonEmpty, $lastNonEmpty - $firstNonEmpty);
See it in action.
Не должно ли это быть в какой-то петле? –
@ Rocket Почему? Если вы хотите удалить только первый и последний, если они пусты, нет, потому что вы уже знаете, что ведьма первая и последняя, поэтому вам нужно только проверить, пусты ли они. Если вы хотите удалить ВСЕ первый и последний, кто пуст, то да, вам нужен цикл, см. Мой второй скрипт. –
В исходной почте четко отображаются два элемента, удаляемых с начала массива, а не только один. Ваше редактирование разрешает это, но просто создает резервную копию @Rocket на этом ... – Dutchie432