user2966167 user2966167 - 2 months ago 14
PHP Question

PHP delete sub-array from multidimensional array by sub-array key value

I've got this array:

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) ""
}
}


I want to delete all sub arrays which include the value 334607943355808 in the key "deleted" in the sub array. I got this code:

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


from: PHP array delete by value (not key) where it's non multi-array, but how can I do it in my case?

EDIT:

I tryed it this way now:

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


But it's not working

Answer

Just a simple foreach with a reference to the sub array:

foreach($array as &$sub_array) {
    if($sub_array['deleted'] == '334607943355808') {
        $sub_array = null;
    }
}

Or by key in the main array:

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
    }
}