Код (PHP): <?php $array = array ('фигня' , 'ботва' , 'ерунда') ; //Массив для примера $value_to_delete = 'фигня' ; //Элемент с этим значением нужно удалить $array = array_flip($array); //Меняем местами ключи и значения unset ($array[$value_to_delete]) ; //Удаляем элемент массива $array = array_flip($array); //Меняем местами ключи и значения print_r ($array) ; //Распечатываем массив ?> [/code] PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
PHP: <?php unset($array[array_search('somevalue', $array)]); Естественно что при отсутствии элемента удалится не тот что нужно. Поэтому развернешь код и вставишь проверку сам.
Simpliest, Mr.M.I.T. как вы наверное сами заметили, если значения нет, то удаляется первый элемент массива. Во-вторых, удаляется только один элемент с нужным значением, а не все. joost Какая разница, сколько места занимает код? Главное не это, а то, сколько времени он выполняется и сколько затрачивает ресурсов.
Как ты можешь заметить приведенный выше код можно записать в одну строку даже с проверкой включительно. Без флипов массива. Который с точки зрения ресурсов несколько сложнее простого поиска
К собранию: Код (Text): function checkArraySearch($value_for_search, $array) { if (array_search($value_for_search, $array) !== FALSE) { return true; } else { return false; } } while (checkArraySearch($value_for_search, $array)) { unset($array[array_search($value_for_search, $array)]); } Удаляет из массива все элементы значения которых равны искомому, и так же не обладает проблемой с удалением первых элементов массива.
зачем два раза выполнять одно и то же, да еще в цикле?! Код (PHP): while (($i = array_search($value, $array)) !== false) { unset($array[$i]); }
ты ж не мог не заметить, что у тебя функция два раза вызывается. Это звоночек, что код требует переосмысления. Обращай на это внимание.
Код (PHP): //Вариант 1 function rm_from_array($needle, &$array, $all = true){ foreach(array_keys($array,$needle) as $key){ unset($array[$key]); if(!$all)return; } } //Вариант 2 function rm_from_array2($needle, &$array, $all = true){ while(FALSE !== $key = array_search($needle,$array)){ unset($array[$key]); if(!$all)return; } } //Вариант 3 - быстрый function rm_from_array3($needle, &$array, $all = true){ if(!$all){ if(FALSE !== $key = array_search($needle,$array)) unset($array[$key]); return; } foreach(array_keys($array,$needle) as $key){ unset($array[$key]); } } Первый вариант выигрывает по скорости (примерно в 800 раз быстрее в моих тестах) с большими массивами у второго, если удалять все значения. Если удалять первое, то второй вариант шустрее. Поэтому есть третий вариант, он выигрывает у обоих. Тестил на массиве из 10000 записей Код (PHP): $array = array ('фигня' , 'ботва' , 'ерунда'); for($i=0;$i<10000;$i++){ $test[] = $array[rand(0,2)]; }
ну...технически не такой прям и грешный некропост, ведь запощщено по делу и без обращений к автору. Всяко на пользу миру.
Только что искал "php удалить из масива по значению" - наткнулся на пост, вспомнил что уже его видел пару лет назад и что на том же моем сайте, где делаю новый функционал, уже в функциях есть ваша функция)) PHP: function del_from_array($needle, &$array, $all = true){ if(!$all){ if(FALSE !== $key = array_search($needle,$array)) unset($array[$key]); return; } foreach(array_keys($array,$needle) as $key){ unset($array[$key]); } } Спасибо однако. Пост реально полезный))