Intereting Posts
Закрыть открытые HTML-теги в строке Значение в базе данных «участники» показывает ссылку, когда пользователь является администратором Преобразование сокращений чисел (5.2k, 1.7m и т. Д.) В действительные целые числа с PHP Требуется PHP Mailer Form с скриптом File Attachment для отправки информации о форме с или без вложения API USPS возвращает код ошибки 80040B19, а учетная запись находится в разделе «Производство» Запрос UPDATE не работает с LIMIT Видео не загружается Установите PECL Memcached Error Как использовать php-функцию без исходного файла загрузки? PHP $ это, когда нет в контексте объекта для установки общедоступной переменной из вне класса Как перенаправить посетителя на другую страницу через определенное время в PHP? Что такое = & в PHP? utf8 как обычный текст создайте запись mysql, если она не существует, иначе обновите ее Установка фрейма Symfony 406 Неприемлемая ошибка с CPanel & WHM

Есть ли функция PHP для удаления всех / всех пар ключ / значение, которые имеют определенное значение из массива?

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

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

array_diff – это то, что вы хотите.

 $array1 = array("a" => "green", "red", "blue", "red"); $array2 = array("b" => "green", "yellow", "red"); $result = array_diff($array1, $array2); 

Результат: "blue" .

Просто чтобы добавить к этому …

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

например

 <? $test = "hello"; $array1 = array("a" => "green", "red", "bicycle", "red"); $array2 = array("b" => "green", "yellow", "red", "blue", "yellow", "pink"); $result = array_diff($array1, $array2); print_r ($result); ?> 

возвращается

 Array ( [1] => bicycle ) 

Мне нравится функция array_diff, но у меня есть одна сценарий, если вы не хотите передавать массив:

 function array_unset_value($value, &$array) { $key = array_search($value, $array); while ($key !== false) { unset($array[$key]); $key = array_search($value, $array); } } с function array_unset_value($value, &$array) { $key = array_search($value, $array); while ($key !== false) { unset($array[$key]); $key = array_search($value, $array); } } 

array_filter делает это для вас. Вам просто нужно предоставить функцию обратного вызова фильтра:

 function myFilter($Value){ if($Value == 'red'){ return false; } return true; } $Values = array("a" => "green", "red", "bicycle", "red"); $Values = array_filter($Values, 'myFilter'); 

возвращает:

 array { ["a"] => "green" [1] => "bicycle" } 

Функция фильтра должна возвращать значение true для значений, которые вы хотите сохранить, и false для тех, которые вы хотите удалить. Затем просто перейдите и используйте array_values ​​для повторной индексации массива. например

 $Values = array_values(array_filter($Values, 'myFilter')); 

Если вы делаете это внутри объекта и хотите вызвать метод фильтра внутри объекта, вы можете использовать эту форму для обратного вызова:

 array_filter($Values, array($this,'myFilter')); 

Перестройте эту «невозможную» функцию, я бы предложил:
function pf_cleanarray ($ arraytoclean = false, $ to_explode = false, $ delimiter = false) {/ * PortalPress.org 2011 [сохранить этот комментарий, пожалуйста] – очищает массив до NULL или создает массив с содержимым; использовать с осторожностью и лучше не использовать на равномерной длины [ассоциативные] массивы

Это выглядит ужасно, я знаю, особенно без отступов на Stackoverflow. Но при перестройке это может быть очень полезным, динамичным инструментом, используя только простейшие функции, поэтому вы сможете манипулировать ключами и значениями по своему усмотрению на многоассемблере. Ключевой функцией является удаление пустых значений или создание массива с взрывом, это чистое, но с небольшими проблемами оно может быть превращено в функцию, которая исключает элементы в зависимости от ключа или значения. – Игорь М. –

Простой пример:
$ А [0] [0] [0] [0] [0] [0] = "А";
$ A [1] [0] [0] [0] [0] [0] = "";
$ A [2] [0] [0] [0] [0] [0] = "";
$ А [0] [0] [0] [0] [0] [1] = "";
$ A [1] [0] [0] [0] [0] [1] = "";
$ A [2] [0] [0] [0] [0] [1] = "";
$ А [0] [0] [0] [0] [0] [2] = "";
$ A [1] [0] [0] [0] [0] [2] = "";
$ A [2] [0] [0] [0] [0] [2] = "";
$ А [0] [0] [0] [0] [0] [3] = "";
$ A [1] [0] [0] [0] [0] [3] = "";
$ A [2] [0] [0] [0] [0] [3] = "";
$ А [0] [0] [0] [0] [0] [4] = "";
$ A [1] [0] [0] [0] [0] [4] = "";
$ A [2] [0] [0] [0] [0] [4] = "";
$ А [0] [0] [0] [0] [0] [5] = "";
$ A [1] [0] [0] [0] [0] [5] = "А";
$ A [2] [0] [0] [0] [0] [5] = "";
$ A array: Array ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => A [1 ] => [2] => [3] => [4] => [5] =>)))))
[1] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => [1] => [2] => [3] => [4] => [5] => А)))))
[2] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => [1] => [2] => [3] => [4] => [5] =>))))))
Результаты в $ A:
Массив ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => А)))))
[1] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => Array ([0] => А))))))
* /
if ($ arraytoclean === 0 || $ arraytoclean) {
if (! is_array ($ arraytoclean)) {
if ($ to_explode && $ delimiter) {
$ Arraytoclean = взрываются ($ разделитель, $ arraytoclean);
} else {
$ Arraytoclean = Array ($ arraytoclean);
}
}
$ NZX = 0;
$ Keyarray = array_keys ($ arraytoclean);
for ($ nYx = 0; $ nYx $ keydigit = true;
if ($ keyarray [$ nYx]! == $ nYx) {
$ Keydigit = ложь;
ломать;
}
}
for ($ nYx = 0; $ nYx if (! is_array ($ arraytoclean [$ keyarray [$ nYx]])) {
if ($ arraytoclean [$ keyarray [$ nYx]]) {
if (! isset ($ retarraytoclean)) {
$ Retarraytoclean = Array ();
}
$ retarraytoclean [(($ keydigit)? $ nZx: $ keyarray [$ nYx])] = $ arraytoclean [$ keyarray [$ nYx]];
$ NZX ++;
}
} else {
$ Temparr = pf_cleanarray ($ arraytoclean [$ keyarray [$ NYX]]);
if ($ temparr) {
if (! isset ($ retarraytoclean)) {
$ Retarraytoclean = Array ();
}
$ retarraytoclean [(($ keydigit)? $ nZx: $ keyarray [$ nYx])] = $ temparr;
$ NZX ++;
}
}
}
}
if (isset ($ retarraytoclean)) {
возврат ($ retarraytoclean);
} else {
вернуть (NULL);
}
}