Многие разработчики на php неоднократно сталкивались с необходимостью упорядоченного, структурированного хранения нескольких переменных и работы с ними. Как нельзя лучше для этих целей подходят массивы. Также неоднократно возникает необходимость добавить или удалить какой-либо элемент из массива. Иногда это делается с помощью функций array_push и unset.
Как говорят источники,
array_push Добавляет один или несколько элеметов в конец массива.
Так, например, чтобы добавить 1 элемент в конец массива, некоторые используют такой код:
array_push($arr, "value");
Далее информация:
unset() - разрушает специфицированные переменные.
Опять же пример:
unset($arr['key1']); //удалит элемент с ключом key1
Но, в некоторых случаях, разработчика могут поджидать интересные неожиданности в результате совместной работы этих функций!
Как Вы думаете, какой Вы получите результат работы этого кода:
<?php
$arr = array();
array_push($arr,'A'); //добавляем массив 1 элемент 'A'
array_push($arr,'B'); //добавляем в конец массива 'B'
array_push($arr,'C'); //добавляем в конец массива 'C'
unset($arr[count($arr)-1]); //удаляем последний элемент массива
array_push($arr,'D'); //добавляем в конец массива 'D'.
print_r($arr);
?>
Такой?
Array ( [0] => A [1] => B [2] => D )
Хрен там, Вы получите вот этот массив:
Array ( [0] => A [1] => B [3] => D )
То есть порядковая нумерация ключей сбилась! И после удаления элемента, индекс ключей не уменьшился на 1.
И если Вы, вдруг, захотите пройтись перебором по его элементам с помощью функции
for ($=0;$i<count($arr);$i++) {
//делать что-то с $arr[$i];
}
То Вы получите весьма непредсказуемый результат.
Т.е. в данном случае Вам уже придется использовать функцию
foreach ($arr as $arrelement) {
//делать что-то с $arrelement;
}
Тогда Вы получите адекватный результат.
Если же Вы планируете в дальнейшем пройтись по элементам массива с помощью перебора и функции for, то изначально Вам нужно использовать другой код для добавления элементов в массив:
<?php
$arr = array();
$arr[count($arr)]='A'; //добавляем массив 1 элемент 'A'
$arr[count($arr)]='B'; //добавляем в конец массива 'B'
$arr[count($arr)]='C'; //добавляем в конец массива 'C'
unset($arr[count($arr)-1]); //удаляем последний элемент массива
$arr[count($arr)]='D'; //добавляем в конец массива 'D'
print_r($arr);
?>
Тогда массив действительно будет таким:
Array ( [0] => A [1] => B [2] => D )
Надеюсь данный ликбез кому-то оказался полезен и он сделал соответствующие выводы.
Удачных Вам проектов!