Как удалять из массива числа. Удалить из массива четные элементы. Удаление массива и его элементов

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

Данная задача может быть реализована разными методами, в зависимости от того, что мы знаем об удаляемом элементе – известен ли ключ (номер или идентификатор элемента в массиве) или только его значение.

Удаление элемента в массиве по его ключу

Если известен ключ элемента, то задача очень проста. Функция unset() позволяет удалить элемент массива или любую переменную (так же будет очищена задействованная под переменную память компьютера).

Например, имеем массив:

$myArr = array (1,2,3,4,5);

Для удаления элемента со значением "3" используем код:

unset($myArr);

Обратите внимание, что указывается не значение (3), а ключ элемента (2), начинающийся, в данном случае с 0. Так, если нужно удалить первый элемент массива, то указываем нулевой элемент:

unset($myArr);

Так же стоит учитывать, что после наших двух удалений, массив теперь содержит три элемента:

Array
=> 2
=> 4
=> 5
)

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

Удаление элемента массива по его значению

Если ключ элемента не известен, а известно только значение массива, то придется перебрать все элементы массива циклом и удалить искомый. Например, удаляем элемент со значением "3":

$myArr = array (1,2,3,4,5);
foreach ($myArr as $key => $item){
if ($item == 3){
unset($myArr[$key]);
}
}

* Обратите внимание, что проверяется в условии значение массива, доступное в цикле в переменной $item, а при удалении, указывается ключ элемента (переменная $key).

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

Удаление пересекающихся элементов массива

Одним из удобных средств PHP является возможность получить массив из элементов, не пересекающихся с элементами других массивов. Для этого применяется функция array_diff (). В качестве параметров, она принимает массивы, возвращая новый массив. Например, имеется исходный массив $myArr из которого нам нужны только элементы не входящие в массив $myArr2:

$myArr = array (1,2,3,4,5);
$myArr2 = array (3,4);

Применив функцию array_diff() , получим новый массив, содержащий только необходимые элементы:

$resArr = array_diff($myArr, myArr2);

В результате $resArr будет содержать:

Array
=> 1
=> 2
=> 5
)

* Здесь стоит обратить внимание на то, что ключи при создании нового массива сохраняются. Кроме того, стоит знать, что выборка идет только из первого массива. Так, если в $myArr2 другие уникальные элементы, например "6" или "7", то на результат это никак не повлияет - они в новый массив добавлены не будут.

35 ответов

Существуют разные способы удаления элемента массива, причем некоторые из них более полезны для некоторых конкретных задач, чем другие.

Удалить один элемент массива

Если вы хотите удалить только один элемент массива, вы можете использовать \unset() или альтернативно \array_splice() .

Также, если у вас есть значение и вы не знаете ключ для удаления элемента, вы можете использовать \array_search() чтобы получить ключ.

\unset() метод

Обратите внимание, что когда вы используете \unset() ключи массива не будут меняться/переиндексироваться. Если вы хотите переиндексировать ключи, вы можете использовать \array_values() после \unset() который преобразует все ключи в числовые нумерованные ключи, начиная с 0.

$array = array(0, 1, 2, 3); unset($array); $array = array_values($array); var_dump($array); /* array(3) { => int(0) => int(1) => int(3) } */

// Our initial array $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red"); print_r($arr); // Remove the elements who values are yellow or red $arr = array_diff($arr, array("yellow", "red")); print_r($arr);

Это вывод из кода выше:

Array ( => blue => green => red => yellow => green => orange => yellow => indigo => red) Array ( => blue => green => green => orange => indigo)

Теперь array_values () будет переиндексировать числовой массив, но он удалит все ключевые строки из массива и заменит их числами. Если вам нужно сохранить имена ключей (строки) или переиндексировать массив, если все ключи числовые, используйте array_merge():

$arr = array_merge(array_diff($arr, array("yellow", "red"))); print_r($arr);

Array ( => blue => green => green => orange => indigo)

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

$my_array = array_diff($my_array, array("Value_to_remove"));

Например:

$my_array = array("Andy", "Bertha", "Charles", "Diana"); echo sizeof($my_array) . "\n"; $my_array = array_diff($my_array, array("Charles")); echo sizeof($my_array);

Отображается следующее:

В этом примере элемент со значением "Чарльз" удаляется, как это можно проверить с помощью вызовов sizeof(), которые сообщают размер 4 для исходного массива и 3 после удаления.

Уничтожить один элемент массива

unset()

$array1 = array("A", "B", "C", "D", "E"); unset($array1); // Delete known index(2) value from array var_dump($array1);

Выход будет:

Array(4) { => string(1) "A" => string(1) "B" => string(1) "D" => string(1) "E" }

Если вам нужно повторно индексировать массив:

$array1 = array_values($array1); var_dump($array1);

Тогда вывод будет:

Array(4) { => string(1) "A" => string(1) "B" => string(1) "D" => string(1) "E" }

Вывести элемент из конца массива - вернуть значение удаляемого элемента

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry"); $last_fruit = array_pop($stack); print_r($stack); print_r("Last Fruit:".$last_fruit); // Last element of the array

Выход будет

Array ( => orange => banana => apple) Last Fruit: raspberry

Удалите первый элемент (красный) из массива , - верните значение удаляемого элемента

mixed array_shift (array &$array)

$color = array("a" => "red", "b" => "green" , "c" => "blue"); $first_color = array_shift($color); print_r ($color); print_r ("First Color: ".$first_color);

Выход будет:

Array ([b] => green [c] => blue) First Color: red

unset() уничтожает указанные переменные.

Поведение unset() внутри функции может варьироваться в зависимости от типа переменной, которую вы пытаетесь уничтожить.

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

Ответ приведенного выше кода будет бар .

Чтобы unset() глобальную переменную внутри функции:

Для ассоциативных массивов используйте unset :

$arr = array("a" => 1, "b" => 2, "c" => 3); unset($arr["b"]); // RESULT: array("a" => 1, "c" => 3)

Числовые массивы

Для числовых массивов используйте array_splice :

$arr = array(1, 2, 3); array_splice($arr, 1, 1); // RESULT: array(0 => 1, 1 => 3)

Примечание

Если вам нужно удалить несколько значений в массиве, а записи в этом массиве - объекты или структурированные данные, - ваш лучший выбор. Те записи, которые возвращают true из функции обратного вызова, будут сохранены.

$array = [ ["x"=>1,"y"=>2,"z"=>3], ["x"=>2,"y"=>4,"z"=>6], ["x"=>3,"y"=>6,"z"=>9] ]; $results = array_filter($array, function($value) { return $value["x"] > 2; }); //=> [["x"=>3,"y"=>6,z=>"9"]]

Если вам нужно удалить несколько элементов из ассоциативного массива, вы можете использовать array_diff_key() (здесь используется array_flip()):

$my_array = array("key1" => "value 1", "key2" => "value 2", "key3" => "value 3", "key4" => "value 4", "key5" => "value 5",); $to_remove = array("key2", "key4"); $result = array_diff_key($my_array, array_flip($to_remove)); print_r($result);

Array ( => value 1 => value 3 => value 5)

Предположим, у вас есть следующий массив:

Array ( => 193 => 5)

Чтобы удалить storage , выполните:

Unset($attributes["storage"]); $attributes = array_filter($attributes);

И вы получите:

Array ( => 193)

Я просто хотел бы сказать, что у меня был определенный объект, который имел переменные атрибуты (это было в основном отображение таблицы, и я менял столбцы в таблице, поэтому атрибуты в объекте, отражающие таблицу, также могли бы меняться):

Class obj { protected $fields = array("field1","field2"); protected $field1 = array(); protected $field2 = array(); protected loadfields(){} // This will load the $field1 and $field2 with rows of data for the column they describe protected function clearFields($num){ foreach($fields as $field) { unset($this->$field[$num]); // This did not work the line below worked unset($this->{$field}[$num]); // You have to resolve $field first using {} } } }

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

Следуйте функциям по умолчанию

$Array = array("test1","test2","test3","test3"); unset($Array);

$Array = array("test1","test2","test3","test3"); array_pop($Array);

$Array = array("test1","test2","test3","test3"); array_splice($Array,1,2);

$Array = array("test1","test2","test3","test3"); array_shift($Array);

Хотя unset() упоминалась здесь несколько раз, все же следует упомянуть, что unset() принимает несколько переменных, что упрощает удаление нескольких несмежных элементов из массива за одну операцию:

// Delete multiple, noncontiguous elements from an array $array = [ "foo", "bar", "baz", "quz" ]; unset($array, $array); print_r($array); // Output: [ "foo", "bar" ]

unset() динамически

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

$array = range(0,5); $remove = ; $array = unset($remove); // FAILS: "unexpected "unset"" print_r($array);

Вместо этого unset() может использоваться динамически в цикле foreach:

$array = range(0,5); $remove = ; foreach ($remove as $k=>$v) { unset($array[$v]); } print_r($array); // Output: [ 0, 3, 4, 5 ]

Удалить ключи массива, скопировав массив

Существует также еще одна практика, которая еще не упомянута. Иногда самый простой способ избавиться от определенных ключей массива - просто скопировать $ array1 в $ array2.

$array1 = range(1,10); foreach ($array1 as $v) { // Remove all even integers from the array if($v % 2) { $array2 = $v; } } print_r($array2); // Output: [ 1, 3, 5, 7, 9 ];

Очевидно, такая же практика применима к текстовым строкам:

$array1 = [ "foo", "_bar", "baz" ]; foreach ($array1 as $v) { // Remove all strings beginning with underscore if(strpos($v,"_")===false) { $array2 = $v; } } print_r($array2); // Output: [ "foo", "baz" ]

Решения:

  1. Чтобы удалить один элемент, используйте unset() :
unset($array); unset($array["foo"]);
  1. Чтобы удалить несколько несмежных элементов, также используйте unset() :
unset($array, $array); unset($array["foo"], $array["bar"]);
  1. Чтобы удалить несколько смежных элементов, используйте array_splice() :
array_splice($array, $offset, $length);

Дальнейшее объяснение:

$array = $array["foo"] = "";

Помимо синтаксиса, есть логическая разница между использованием unset() и назначением элемента. Первый говорит, что This doesn"t exist anymore, а второй говорит, что This still exists, but its value is the empty string.

Если вы имеете дело с числами, лучше выбрать 0. Таким образом, если компания остановит производство звездочки модели XL1000, она обновит свой инвентарь:

Unset($products["XL1000"]);

Однако, если в нем временно закончились звездочки XL1000, но в конце этой недели планировалось получить новую партию от завода, это лучше:

$products["XL1000"] = 0; $animals = array_values($animals);

Удалить элемент массива на основе ключа:

Используйте функцию unset , как показано ниже:

$a = array("salam", "10", 1); unset($a); print_r($a); /* Output: Array ( => salam => 1) */

Удалить элемент массива на основе значения:

Используйте array_search функцию для получения ключа элемента и используйте вышеприведенный способ удаления элемента массива, как показано ниже:

$a = array("salam", "10", 1); $key = array_search(10, $a); if($key !== false) { unset($a[ $key ]); } print_r($a); /* Output: Array ( => salam => 1) */

Создайте свой массив в переменной $array а затем, где я поместил "элемент, который вы хотите удалить", вы поместите что-то вроде: "a". А если вы хотите удалить несколько, то: "a", "b".

Фукции для работы с массивами и операции над массивами (Часть 2)

Слияние массивов

Слияние (конкатенация) массивов - это операция создания массива, состоящего из элементов нескольких других массивов. Слияние массивов - это очень опасная операция, поскольку результат слияния подчиняется своей логике, забыв о которой можно потерять данные. Слияние массивов реализуется при помощи оператора "+ " или с помощью функции Слияние может осуществляться только с помощью функции array_merge() .

Предположим, мы имеем два массива:

$A = array("1"=>"Первый", "2"=>"Второй");
$B = array("3"=>"Третий", "4"=>"Четвертый");

Теперь сольем данные два массива в один массив $C :

Оператор "+ " для массивов не коммутативен. Это означает, что $A + $B не равно $B + $A .

В результате рассмотренного примера мы получим массив $C следующего вида:

"1"=>"Первый", "2"=>"Второй", "3"=>"Третий", "4"=>"Четвертый"

А в результате $B + $A мы получим такой массив:

"3"=>"Третий", "4"=>"Четвертый", "1"=>"Первый", "2"=>"Второй"

При слиянии списков такой метод не работает. Поясним данный факт на примере:

Предположим, у нас есть два массива:

$A = array(10,11,12);
$B = array(13,14,15);

В результате слияния списков $A и $B ($A + $B ) мы получим: 10,11,12. А это совсем не тот результат, который мы хотели получить... Связано это с тем, что при слиянии списков с одинаковыми индексами в результирующем массиве остается элемент первого массива, причем на том же месте. В таком случае нам необходимо использовать функцию

Пример использования функции count() :

$ arr = 5 ;
$ arr = 4 ;
$ arr = 8 ;
$ arr = 3 ;
$ arr = 8 ;
echo "

Число элементов массива: " . count ($ arr ). "

" ;
// Выводит: Число элементов массива: 5
?>

Удаление массива и его элементов

Если вы хотите удалить массив целиком, воспользуйтесь функцией unset() .

Если вы хотите удалить пару ключ/значение, вы также можете использовать функцию unset() . Приведем конкретные примеры:

$arr = array(5 => 1 , 12 => 2 );

$arr = 56 ; // В этом месте скрипта это
// эквивалентно $arr = 56;

$arr [ "x" ] = 42 ; // Это добавляет к массиву новый
// элемент с ключом "x"
форум портала PHP . SU