Verification: a143cc29221c9be0

Php array удалить пустые элементы

Php array удалить пустые элементы

Массивы PHP

PHP - это современный язык программирования, функциональность в части работы с массивами выполнена на высоком уровне. Программист имеет возможность использовать обычные и ассоциативные массивы, проектировать многомерные структуры данных, иметь в качестве элементов массива значение любого типа.

Есть развитый набор функций по работе с массивами, специальные синтаксические конструкции. Имеется возможность обходить массив по своему алгоритму и назначать собственные функции обработки.

Примеры создания и использования массива

Функция scPrint - вспомогательная. Она рекурсивно записывает массив в строку символов для демонстрации получаемых результатов.

Массив $aFruits создается обычным образом: перечисляются значения, индексы назначаются автоматически с нуля. Последняя запятая не имеет значения и не приводит к созданию еще одного пустого элемента.

Массив $aData создается пустым, потом в него вносятся значения. Три - автоматом, а два - с ассоциативными индексами, которые не влияют на общую нумерацию значений. Так, элементы 'слива' и 'персик' имеют индексы 'новая' и 'свежий' соответственно.

Массив $aInfo - многомерный и ассоциативный.

Создание массива PHP

Как в PHP-массиве удалить элемент, показывают три операции удаления.

Первая операция удаляет второй элемент из массива $aFruits, у него индекс равен 1. Следует отметить, что следующие за ним индексы не сдвигаются, значит, в циклических операциях с таким массивом следует предусмотреть проверку существования элемента.

Вторая операция - удаляет последний и первый элементы в массиве $aData, что подтверждает отсутствие влияния удаления на индексы и возможность одновременного удаления нескольких элементов.

Третья - удаляет массив в массиве и элемент в массиве, входящий в другой массив.

Обычное удаление элементов - unset

Функция unset удаляет. Неважно, что. Это может быть просто переменная или элемент массива. Считается, что unset() - это оператор языка, а не функция. Никакого значения этот оператор не возвращает, а то, что ему передано в качестве параметров, он «разрушает». Переменная или массив исчезают, как будто их не было.

Удаление элемента - unset

На PHP удалить пустые элементы массива можно по-разному, собственно, что считать пустым элементом - зависит от программиста. Однако не слишком разумно использовать для этого несколько параметров в операторе unset(). Практичнее групповые операции выносить в групповые функции.

Современные компьютеры очень быстро работают, а PHP очень скор. Но это не повод создавать и обрабатывать тонны информации громоздкими алгоритмами, это объективное основание подойти к процессу удаления элементов массива прогрессивными способами.

Удаление элементов строчными методами

На PHP удалить пустые элементы массива можно оптом, преобразовав массив в строку и вернув его обратно. Но этот случай годится только для реально пустых элементов, пропущенных индексов или с целью переиндексации массива.

Понятие пустого элемента зависит от задачи. Часто пустым становится существующий элемент массива, в котором содержатся определенные сведения. Например, в массиве ведется учет посетителей. Элемент массива содержит:

  • время прихода посетителя;
  • текущий режим работы;
  • активную страницу;
  • время последнего действия.

Если разница между временем прихода и временем последнего действия составляет более 1 минуты (или иное значение), можно считать, что клиент покинул сайт. Записи о таких клиентах можно удалять, если стоит задача мониторить список активных посетителей и не использовать более совершенные методы с использованием JavaScript.

Однако «строчная» обработка хороша. Например, на PHP удалить повторяющиеся элементы массива можно так:

Строчное удаление элементов

Быстрый и доступный способ. Необязательно использовать символы '[' и ']' для обозначения каждого элемента, но следует помнить, что, трансформируя массив в строку, нужно соблюсти требование уникальности каждого его элемента. Символы для обрамления следует выбирать с учетом символов, которые допустимы в элементе. Незыблемое правило: каждый элемент массива в строке уникален и имеет свое место (иначе ничего не вернуть обратно).

Этот способ удобнее, когда стоит задача на PHP удалить элемент массива по значению. Можно использовать функцию array_flip и поменять значения и ключи местами, потом сделать классический unset. Можно использовать функцию array_search и найти ключ значения, которое нужно удалить. Но строчный вариант решения нагляднее и проще.

О размерностях и размерах

PHP практически ни в чем не ограничивает разработчика: ни в количестве размерностей, ни в размерах элементов. Смысла увлекаться этим нет. Каждый элемент должен быть минимально возможной длины, а количество размерностей должно стремиться к единице.

Если количество размерностей массива более трех - это веское основание пересмотреть решение. Если элемент массива имеет длину более 4000-8000 символов, должны возникать сомнения в разумности построенной картины данных.

О размерностях и размерах

Это мнение вытекает не из контекста функциональности PHP-массива: удалить элемент, добавить объект другого типа, изменить что-то одно на что-то совсем другое. Простота - залог успеха не только в жизни, но и в алгоритме. Программа должна работать, а не удивлять своими размерностями, размерами и масштабами идей. Важен результат, а не грандиозная идея.

Стековая идея на PHP

Как современный язык программирования PHP не проходит мимо рекурсии и стека. Принципиально неважно, что имеет в виду программист, когда использует функцию array_pop() в PHP: удалить последний элемент массива или просто получить его в какую-либо переменную.

Но следует иметь в виду, что в данном контексте функция array_pop - это из сферы push & pop, то есть это инструменты стека, а не удаления.

Стековая идея на PHP

Здесь принято говорить не «удалить», а «извлечь». Семантика существенно отличается. Однако функция array_shift() в PHP: удалить первый элемент массива или извлечь его - имеет иной оттенок. Здесь также элемент извлекается во внешнюю переменную, и его не будет в массиве, но индексы смещаются.

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

Как удалить элемент массива в PHP?

Если вы знаете ключ, то удаление сводится к вызову функции unset().

$a = array('a','b','c');

unset($a[1]); //удалим элемент с ключем - 1

print_r($a);

//увидем на экране : Array ( [0] => a [2] => c )

?>

Как удалить первый элемент массива в PHP?

Если вы не знаете ключ, но знаете, что удалить нужно именно первый элемент массива, то можно воспользоваться функцией array_shift(). Функция извлекает значение первого элемента, удаляет его из массива и производит перенумерацию числовых ключей начиная с нуля.

$stack = array(3 => 'a', 5 => 'b', 'third element' => 'c');

$elm = array_shift($stack);

print_r($stack);

//увидим на экране : Array ( [0] => b [third element] => c )

?>

В итоге, первый элемент удален, а элемент 5 => ‘b’, попадает под перенумерацию. Элементы со строковыми ключами перенумерацией не затрагиваются.

Как в PHP удалить последний элемент массива?

Похожим образом удаляется последний элемент из массива. В PHP для этого послужит функция array_pop().

$stack = array(3 => 'a', 5 => 'b', 'third element' => 'c');

$elm = array_pop($stack);

print_r($stack);

//увидим на экране : Array ( [3] => a [5] => b )

?>

Последний элемент массива удален, перенумерация оставшихся элементов не производится.

Как удалить из массива пустые элементы в PHP?

Разберемся с понятием пустой элемент. Под «пустыми» элементами можно понимать разные скалярные и не скалярные значения. Наиболее полно определение «пустого значения» определяет результат работы функции empty(). Она возвращает true для пустого элемента (не только скалярного). В этом можно убедиться на следующем примере.

$stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00');

foreach ($stack as $k => $v)

    if (empty($v)) unset($stack[$k]);

print_r($stack);

//увидим на экране : Array ( [3] => a [5] => b [3rd] => c [12] => 00 )  

?>

Т.е. мы в цикле проверяем каждый элемент массива функцией empty(), и удаляем пустые. Обратите внимание, что строковый скаляр ‘0’ — тоже считается пустым элементом. А вот ’00’ — уже не является пустым.

Если проверка массива по-элементно кажется вам не оптимальной, то можно воспользоваться функций сравнения массивов — array_diff(), где перечислить все элементы, которые мы считаем «нулевыми».

$stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00', ' ');

$stack = array_diff($stack, array(array(), null, false, 0, '', '0', '00', ' '));

print_r($stack);

//увидим на экране : Array ( [3] => a [5] => b [3rd] => c )  

?>

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

1. Удаляем элемент массива в PHP

Чтобы удалить элемент в PHP, достаточно всего лишь знать его ключ — в таком случае удаление будет сведено к вызову функции unset():

    php
$a = array('a','b','c');
unset($a[1]); //удаляем элемент с ключом «1»
print_r($a);
//на экране отобразится: Array ( [0] => a [2] => c ) 
?>

2. Как удалить 1-й элемент массива?

Если не знаем ключ, но знаем, что удалять надо 1-й элемент массива, подойдёт функция array_shift(). Она извлечёт значение 1-го элемента, удалит его из массива и выполнит перенумерацию числовых ключей, начав с нуля.

    php
$stack = array(3 => 'a', 5 => 'b', 'third element' => 'c');
$elm = array_shift($stack);
print_r($stack);
//на экране отобразится: Array ( [0] => b [third element] => c ) 
?>

В нашем случае 1-й элемент удаляется, а элемент 5 => ‘b’, попадает под перенумерацию. Что касается элементов со строковыми ключами, то их перенумерация не затронет.

3. Как удалить последний элемент массива?

Схожим образом выполняют удаление последнего элемента массива. Для этого в PHP есть функция array_pop().

    php
$stack = array(3 => 'a', 5 => 'b', 'third element' => 'c');
$elm = array_pop($stack);
print_r($stack);
//на экране отобразится: Array ( [3] => a [5] => b ) 
?>

После удаления последнего элемента массива в PHP перенумерация оставшихся элементов не выполняется.

4. Как удалить пустые элементы из массива?

Сначала вспомним, что называют пустым элементом. Лучше всего определить «пустое значение» помогает результат работы функции empty(). Функция возвратит true для пустого элемента, причем не только скалярного. Убедимся в этом на примере ниже:

    php
$stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00');
foreach ($stack as $k => $v) 
    if (empty($v)) unset($stack[$k]);
print_r($stack);
//на экране отобразится : Array ( [3] => a [5] => b [3rd] => c [12] => 00 )  
?>

Итак, мы в цикле проверим каждый элемент массива, используя функцию empty() и удалим пустые элементы. Здесь важно понять, что строковый скаляр ‘0’ — тоже пустой элемент. А вот ’00’ пустым не является.

Если считаете, что поэлементная проверка массива — неоптимальный вариант, воспользуйтесь функцией сравнения массивов в PHParray_diff(), перечислив с её помощью все элементы, которые считаем «нулевыми»:

    php
$stack = array(3 => 'a', 5 => 'b', '3rd' => 'c', array(), null, false, 0, '', '0', '00', ' ');
$stack = array_diff($stack, array(array(), null, false, 0, '', '0', '00', ' '));
print_r($stack);
//на экране отобразится: Array ( [3] => a [5] => b [3rd] => c )  
?>

Очевидно, что данный способ более гибок.