Задать вопрос
@ganjo888

Как найти значение в массиве и удалить?

array:10 [
  0 => array:8 [
    "url" => "example.com"
    "ip" => "2345"
  ]
  1 => array:8 [
    "url" => "example2.com"
    "ip" => "3453"
  ],
   2 => array:8 [
    "url" => "test.com"
    "ip" => "222"
  ]

нужно найти в массиве example.com если он есть то удалить массив где его нашли
тоесть вот этот
0 => array:8 [
    "url" => "example.com"
    "ip" => "2345"
  ]
  • Вопрос задан
  • 443 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Задача: нужно отфильтровать элемент массива по некому критерию (у вас это -- наличие урла в одном из его подэлементов)

Решение: используем фильтр (функция array_filter сделано именно для этих операций), который проверит на нужное условие (наш критерий) и вернет false или true, тем самым скажет -- оставить весь элемент или удалить.

$badUrl = "example.com";

$resultArray = array_filter($startArray, function($arr) use ($badUrl) {
    return !(isset($arr['url']) && $arr['url'] === $excludeUrl);
});


В PHP 7.4 (когда будут доступны короткие лямбды):
$badUrl = "example.com";
$resultArray = array_filter(
    $startArray, 
    fn($arr)  => !(isset($arr['url']) && $arr['url'] === $excludeUrl)
);


Пример работы для вашего примера: https://ideone.com/eXWm3o
Документация: https://www.php.net/manual/ru/function.array-filter.php
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
darakanoit
@darakanoit
Звучит как задание)))
По сути перебирать массив через foreach(возможно добавить $i чтобы знать количество итераций для сравнения с ключами массива),находить там нужное значение ,если это оно то брать $i и удалять элемент с таким же ключом через unset,но думаю есть и более правильный вариант,это так на скорую руку.
Ответ написан
Комментировать
erniesto77
@erniesto77
oop, rb, py, php, js
$arr = []; // здесь исходный массив

$deleteFromUrl = 'example@com';

foreach ($arr as $key => &$item) {
    if (isset($item['url']) and $item['url'] === $deleteFromUrl) {
        unset($item[$key]);
    }
}

print_r($arr, true); // здесь отфильтрованный массив
Ответ написан
@DanKud
$result = array_filter($ваш_массив, function ($n) {
    return $n['url'] !== 'example.com';
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы