Удалить массив из многомерного массива с неустановленным

Можно ли удалить массив из массива? Так выглядит массив ...

[1042] => Array
    (
        [contact_name] => XXX
        [email] => 
        [id] => XXX
    )

[1043] => Array
    (
        [contact_name] => XXX
        [email] => XXX
        [id] => XXX
    )

код...

foreach($contacts as &$contact){

    if(empty($contact['email']) || $contact['email'] == '')
        unset($contact);

}

Вызов снимается с номера телефона по желаемому индексу: unset($array[1043]);

David 13.09.2018 19:54
2
1
98
4

Ответы 4

Это возможно, если вместо ссылок использовать ключи массивов.

foreach($contacts as $key => $contact){
    if(empty($contact['email']))
        unset($contacts[$key]);
}

Я также удалил $contact['email] == '', так как проверка empty() охватывает и пустые (!) Строки.

Примечание: В общем, по возможности избегайте использования ссылок вместе с foreach. Их использование может легко привести к нежелательным побочным эффектам.

как только попробую, прокомментирую результат - Спасибо за быстрый ответ

ThomasC 13.09.2018 21:17

Используйте пару ключ и значение при определении цикла foreach.

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

foreach($contacts as $key => $contact {
     if(empty($contact['email']) || $contact['email'] == '') {
        unset($contacts[$key]);
    }
}

Похоже, вы хотите отфильтровать элементы, у которых нет значения в поле email, в этом случае используйте метод PHP array_filter:

$filtered = array_filter($array, function($contact) {
    if(!empty($contact['email']) && $contact['email'] != '') {
        return $contact;
    }
});

Рабочий пример: Живая демонстрация

пришлось делать традиционный цикл for и использовать индекс для удаления. Не может быть выполнено с помощью цикла foreach.

Редактировать

 // this is the code that worded
for($i = 0; $i <= count($other_array); $i++){
    if( !array_key_exists( "testing", $other_array[$i] ) )
        unset($other_array[$i]);
}

Вы можете добавить код к своему ответу, чтобы проиллюстрировать свое решение.

Joey 23.04.2019 22:51

Другие вопросы по теме