PHP удаляет подмассив из многомерного массива по значению ключа подмассива

У меня есть этот массив:

array(5) {
[0]=>
array(4) {
["nachricht"]=>
string(9) "blablaaaa"["user"]=>
string(15) "334607943355808"["datum"]=>
string(16) "18.09.2014 11:13"["deleted"]=>
string(0) ""}
[1]=>
array(4) {
["nachricht"]=>
string(3) "joo"["user"]=>
string(15) "334607943355808"["datum"]=>
string(16) "18.09.2014 11:56"["deleted"]=>
string(15) "334607943355808"}
[2]=>
array(4) {
["nachricht"]=>
string(4) "noma"["user"]=>
string(15) "334607943355808"["datum"]=>
string(16) "18.09.2014 11:56"["deleted"]=>
string(0) ""}
[3]=>
array(4) {
["nachricht"]=>
string(4) "test"["user"]=>
string(15) "334607943355808"["datum"]=>
string(16) "18.09.2014 11:56"["deleted"]=>
string(0) ""}
[4]=>
array(4) {
["nachricht"]=>
string(4) "doh!"["user"]=>
string(15) "334607943355808"["datum"]=>
string(16) "18.09.2014 11:56"["deleted"]=>
string(0) ""}
}

Я хочу удалить все вложенные массивы, которые включают значение 334607943355808 в ключе «удалено» в вложенном массиве. Я получил этот код:

if(($key = array_search("334607943355808", $array)) !== false) {
unset($array[$key]);
}

от: PHP массив удалить по значению (не ключу) где это не мульти-массив, но как я могу сделать это в моем случае?

РЕДАКТИРОВАТЬ:

Я попробовал это так сейчас:

foreach($array as $delete){
if(($key = array_search("334607943355808", $delete)) !== false) {
unset($delete[$key]);
}
}

Но это не работает

7

Решение

Просто простой foreach со ссылкой на вложенный массив:

foreach($array as &$sub_array) {
if($sub_array['deleted'] == '334607943355808') {
$sub_array = null;
break; //if there will be only one then break out of loop
}
}

Или по ключу в основном массиве:

foreach($array as $key => $sub_array) {
if($sub_array['deleted'] == '334607943355808') {
unset($array[$key]);
break; //if there will be only one then break out of loop
}
}

Вы также можете извлечь deleted значения, поиск и сброс по ключу:

if(($key = array_search('334607943355808',
array_column($array, 'deleted'))) !== false) {
unset($array[$key]);
}
6

Другие решения

Ты можешь использовать array_map().Попробуй это

$finalArr = array_map(function($v){
if($v['deleted'] == '334607943355808') unset($v['deleted']);
return $v;
}, $arr);
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector