PHP - неустановленный массив, где ключ равен X, а значение равно Y - PullRequest
0 голосов
/ 20 января 2020

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

Array
(
    [0] => Array
        (
            [id] => 0
            [fams] => 5
        )
    [1] => Array        --> I want to remove this value using its index, which is "1"
        (
            [id] => 2
            [fams] => 5
        )
)

Я хочу полностью удалить этот массив [1], используя его индекс, поэтому условие - где идентификатор совпадает, например - [id] => 2 Возможно ли удалить конкретное значение с указанным условием c? и без зацикливания (или любого подобного метода, который требует l oop массива)

спасибо заранее!

К вашему сведению - я действительно пытался искать, но, честно говоря, я я не уверен, какое "ключевое слово" мне нужно использовать. Я пробовал раньше, но я нашел, array_search, array_keys - и, похоже, эти 2 не являются. Я в порядке, если нам нужно несколько шагов, если он не использует метод "l oop".

--- update
Я забыл упомянуть, что я использую старый PHP 5,3 .

Ответы [ 3 ]

2 голосов
/ 20 января 2020

array_filter должно нормально работать с PHP 5.3.

Недостатком этого подхода является то, что array_filter будет (внутренне) перебирать все записи вашего массива, даже после найти правильный (это не подход «короткого замыкания»). Но, по крайней мере, это быстро написать и не должно иметь большого значения, если вы не имеете дело с очень большими массивами.

Примечание: вы должны определенно обновить свою версию PHP в любом случае!

$array = array (
  0 =>
  array (
    'id' => 0,
    'fams' => 5
  ),
  1 =>
  array (
    'id' => 2,
    'fams' => 5
  )
);

$indexToRemove = 2;
$resultArray = array_filter($array, function ($entry) use ($indexToRemove) {
  return $entry['id'] !== $indexToRemove;
});

Демо: https://3v4l.org/6DXjl

1 голос
/ 20 января 2020

Вы можете использовать array_search, чтобы найти ключ подмассива, который имеет соответствующее значение id (извлечено с использованием array_column), и, если найден, unset этот элемент:

if (($k = array_search(2, array_column($array, 'id'))) !== false) {
    unset($array[$k]);
}
print_r($array);

Вывод:

Array
(
    [0] => Array
        (
            [id] => 0
            [fams] => 5
        )
)

Демонстрация на 3v4l.org

It Следует отметить, что хотя в этом коде нет явного l oop, array_search и array_column оба l oop проходят через массив внутри.

0 голосов
/ 20 января 2020

Вы можете использовать array_column, чтобы сделать id индексом подмассива, а затем использовать unset

$a = array_column($a, null, 'id');//new array id as index
$index = 2;// id to remove
if($a[$index]) unset($a[$index]);
print_r($a);

Рабочий пример: - https://3v4l.org/ofMr7

...