- Как удалить элемент массива в PHP?
- 1. Удаляем элемент массива в PHP
- 2. Как удалить 1-й элемент массива?
- 3. Как удалить последний элемент массива?
- 4. Как удалить пустые элементы из массива?
- 5. Удаляем повторяющиеся элементы массива в PHP
- Php array unset all but one
- PHP deleting elements of an array by unset ( key or value )
- How to delete an element by using value ( not key ) from an array
- Using array_search()
- Questions
Как удалить элемент массива в PHP?
Одним из мощнейших инструментов PHP-разработчика являются массивы. Если вы работали с массивами в других языках программирования (Delphi, Fortrain, C++), то помните, что везде массив надо объявлять, указывая размерность и тип элементов. В PHP всё обстоит иначе.
Дело в том, что в PHP массив не является линейным объектом. Это, по сути, хеш-массив, представляющий собой набор пар — ключей с их значениями.
Теперь давайте посмотрим, как удалять элементы из хеш-массива в PHP. В вышеупомянутых языках программирования для таких действий придётся создавать специальный объект, односвязный либо 2-связный список, бережно выделять и освобождать память, наблюдать за восстановлением связей в списке. Что касается PHP, то тут весь необходимый «менеджмент» спрятан, но всегда готов к применению.
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’ пустым не является.
Если считаете, что поэлементная проверка массива — неоптимальный вариант, воспользуйтесь функцией сравнения массивов в PHP — array_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 ) ?>
Очевидно, что данный способ более гибок.
5. Удаляем повторяющиеся элементы массива в PHP
Порой возникает необходимость удалить повторяющиеся элементы массива в PHP. Для решения этой задачи существует специальная функция под названием array_unique() :
php $stack = array('a', 'b', 'b', 'c', 'c', 0, '0'); $stack = array_unique($stack); print_r($stack); //на экране отобразится: Array ( [0] => a [1] => b [3] => c [5] => 0 ) ?>
Из кода видно, что функция удалила из PHP-массива повторяющиеся элементы. При этом функция имеет ещё один параметр, указывающий, как сравнивать элементы.
Возможные типы сравнения: • SORT_REGULAR — сравнение без преобразования типа элементов; • SORT_STRING — сравнение как строки; • SORT_NUMERIC — сравнение как чисел (пытаемся преобразовать в число); • SORT_LOCALE_STRING — сравнение как строки, но с учётом выбранного набора символов.
По умолчанию применяется SORT_STRING. Выбирая типы сравнения, помните, что это важно. Давайте изменим тип в прошлом примере на SORT_NUMERIC:
php $stack = array('a', 'b', 'b', 'c', 'c', 0, '0'); $stack = array_unique($stack, SORT_NUMERIC); print_r($stack); //на экране отобразится: Array ( [0] => a ) ?>
Во время сравнения все элементы массива были преобразованы к численному типу скаляра. В нашем случае это неизменно давало значение ноль, в результате чего у нас остался лишь первый элемент.
Хотите знать о PHP больше? Записывайтесь на курс «Backend-разработчик на PHP»!
Php array unset all but one
// Before php 5.4
$array = array(1,2,3);// since php 5.4 , short syntax
$array = [1,2,3];// I recommend using the short syntax if you have php version >= 5.4
Used to creating arrays like this in Perl?
Looks like we need the range() function in PHP:
$array = array_merge (array( 'All' ), range ( 'A' , 'Z' ));
?>You don't need to array_merge if it's just one range:
There is another kind of array (php>= 5.3.0) produced by
$array = new SplFixedArray(5);
Standard arrays, as documented here, are marvellously flexible and, due to the underlying hashtable, extremely fast for certain kinds of lookup operation.
Supposing a large string-keyed array
$arr=['string1'=>$data1, 'string2'=>$data2 etc. ]
when getting the keyed data with
php does *not* have to search through the array comparing each key string to the given key ('string1') one by one, which could take a long time with a large array. Instead the hashtable means that php takes the given key string and computes from it the memory location of the keyed data, and then instantly retrieves the data. Marvellous! And so quick. And no need to know anything about hashtables as it's all hidden away.
However, there is a lot of overhead in that. It uses lots of memory, as hashtables tend to (also nearly doubling on a 64bit server), and should be significantly slower for integer keyed arrays than old-fashioned (non-hashtable) integer-keyed arrays. For that see more on SplFixedArray :
Unlike a standard php (hashtabled) array, if you lookup by integer then the integer itself denotes the memory location of the data, no hashtable computation on the integer key needed. This is much quicker. It's also quicker to build the array compared to the complex operations needed for hashtables. And it uses a lot less memory as there is no hashtable data structure. This is really an optimisation decision, but in some cases of large integer keyed arrays it may significantly reduce server memory and increase performance (including the avoiding of expensive memory deallocation of hashtable arrays at the exiting of the script).
When creating arrays , if we have an element with the same value as another element from the same array, we would expect PHP instead of creating new zval container to increase the refcount and point the duplicate symbol to the same zval. This is true except for value type integer.
Example:$arr = ['bebe' => 'Bob', 'age' => 23, 'too' => 23 ];
xdebug_debug_zval( 'arr' );(refcount=2, is_ref=0)
array (size=3)
'bebe' => (refcount=1, is_ref=0)string 'Bob' (length=3)
'age' => (refcount=0, is_ref=0)int 23
'too' => (refcount=0, is_ref=0)int 23but :
$arr = ['bebe' => 'Bob', 'age' => 23, 'too' => '23' ];
xdebug_debug_zval( 'arr' );(refcount=2, is_ref=0)
array (size=3)
'bebe' => (refcount=1, is_ref=0)string 'Bob' (length=3)
'age' => (refcount=0, is_ref=0)int 23
'too' => (refcount=1, is_ref=0)string '23' (length=2)
or :$arr = ['bebe' => 'Bob', 'age' => [1,2], 'too' => [1,2] ];
xdebug_debug_zval( 'arr' );(refcount=2, is_ref=0)
array (size=3)
'bebe' => (refcount=1, is_ref=0)string 'Bob' (length=3)
'age' => (refcount=2, is_ref=0)
array (size=2)
0 => (refcount=0, is_ref=0)int 1
1 => (refcount=0, is_ref=0)int 2
'too' => (refcount=2, is_ref=0)
array (size=2)
0 => (refcount=0, is_ref=0)int 1
1 => (refcount=0, is_ref=0)int 2This function makes (assoc.) array creation much easier:
function arr (. $array )< return $array ; >
?>It allows for short syntax like:
$arr = arr ( x : 1 , y : 2 , z : 3 );
?>Instead of:
$arr = [ "x" => 1 , "y" => 2 , "z" => 3 ];
// or
$arr2 = array( "x" => 1 , "y" => 2 , "z" => 3 );
?>Sadly PHP 8.2 doesn't support this named arguments in the "array" function/language construct.
PHP deleting elements of an array by unset ( key or value )
We can remove an element from an array by using unset command.
This unset command takes the array key as input and remove that element from the array. After removal the associated keys and values ( of other balance elements ) does not change.Here we are removing the element with key=3. If the array has 7 elements and if try to delete 9th element then unset command will not return any error but nothing will be deleted.
Here is an example how unset command is used.
How to delete an element by using value ( not key ) from an array
In the above examples we have used key if the array as input to remove the element from the array. If we don't know the key and we know the value then how to remove the element?
There is no direct function to do this but we can use array_diff function to remove the element by using the value. Note that array_diff function takes two arrays as input. Here is the code , we want to remove d from our $input array.
$new_array=array_diff($input,array("d"));
$remove=array(c,f); $new_array=array_diff($input,$remove);
while (list ($key, $val) = each ($new_array)) < echo "$key ->$val
";>Using array_search()
$input=array(a,b,c,d,e,f,g); unset($input[array_search('d',$input)]); while (list ($key, $val) = each ($input)) < echo "$key ->$val
"; >0 -> a 1 -> b 2 -> c 4 -> e 5 -> f 6 -> g
- Array Adding & Removing Elements
- array_pop(): Removing Last element of the Array
- array_shift(): Removing First element of the Array
- array_unset(): Removing element from any position of the Array
- array_push(): Adding elements at the end of the Array
- array_unshift(): Adding elements at the beginning of the Array
Questions
- How do you delete a specific key-value element from an array using the `unset` command in PHP?
- What is the syntax for using the `unset` command to remove an element from an array?
- Can you delete multiple key-value elements from an array using a single `unset` command in PHP?
- How do you handle cases where the specified key does not exist in the array while using `unset`?
- Can you use the `unset` command to delete nested or multidimensional array elements in PHP?
- What are the effects of using `unset` on an array? Does it reindex the remaining elements?
- How do you check if an element has been successfully deleted from an array after using `unset`?
- Are there any alternative methods or functions in PHP to delete elements from an array, other than `unset`?
- What precautions should be taken when using `unset` to delete elements from an array to avoid unexpected behavior?
- Can you use the `unset` command to remove an element by its value rather than its key in PHP?
plus2net.com
Click here for More on PHP Array functions
- Array functions in PHP
- array : Creating an Array
- Multidimensional array : Creating and displaying
- array_diff Difference of two arrays
- array_count_values counting the frequency of values inside an array
- count : sizeof Array Size or length
- array_push : Adding element to an Array
- array_merge : Adding two arrays
- array_sum : Array Sum of all elements
- array_keys : To get array of keys from an array
- max Getting the maximum or Minimum value of elements in an array
- current Value of present cursor element in an array
- reset Moves the internal pointer to first element
- end Moves the internal pointer to last element
- Array checkbox
- array_map : Using user defined and native function to each element of an array
- current : Returns current element
- reset : Move cursor to first element
- end : Move cursor to last element
- next : Move cursor to next
- prev : Move cursor to previous element
- in_array : IN Array to search for elements inside an array
- is_array : To check the variable is array or not
- array_rand : Random elements of Array
- array_unique : Array Unique values
- Breaking of strings to create array using split command
- Session Array to maintain data in different pages
- unset : Deleting elements of an array by using its key or value
- sort: sorting of PHP array
- usort: Sorting array by using user defined function
- Displaying the elements of an array
- Filtering elements and returning new array based on callback function
- Applying user function to each element of an array
- http_build_query: generate query string using elements to pass through URL