PHP: удалить элемент из многомерного массива (по ключу) с помощью foreach

Я получил многомерный массив. Из каждого подмассива я хотел бы удалить / сбросить значения с индексом 1. Мой массив $ data.

Array
(
[3463] => Array
(
[0] => 1
[1] => 2014
[context] => 'aaa'
)

[3563] => Array
(
[0] => 12
[1] => 2014
[context] => 'aaa'
)

[2421] => Array
(
[0] => 5
[1] => 2014
[context] => 'zzz'
)
)

Я хотел бы удалить каждый элемент с индексом ‘1’ из подмассивов. Желаемый результат:

Array
(
[3463] => Array
(
[0] => 1
[context] => 'aaa'
)

[3563] => Array
(
[0] => 12
[context] => 'aaa'
)

[2421] => Array
(
[0] => 5
[context] => 'zzz'
)
)

Почему это не работает?

foreach ($data as $subArr) {
foreach ($subArr as $key => $value) {
if ($key == '1') {
unset($subArr[$key]);
}

}
}

Извините, если эта проблема тривиальна для вас, ребята.

3

Решение

Простой способ!?
Вы можете сделать это только с одним foreach!

foreach ($data as $key => $subArr) {
unset($subArr['1']);
$data[$key] = $subArr;
}
9

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

Это не работает, потому что $subArr из внешнего foreach содержит копии из значений $data и внутренний foreach изменяет эти копии, оставляя $data не тронут.

Вы можете исправить это, сказав PHP делать $subArr ссылки на исходные значения, хранящиеся в $data:

foreach ($data as &$subArr) {
foreach ($subArr as $key => $value) {
if ($key == '1') {
unset($subArr[$key]);
}
}
}

Другой вариант — использовать функцию array_map(). Он использует функцию обратного вызова, которая может проверять (и изменять) каждое значение $data и он возвращает новый массив.

$clean = array_map(
function (array $elem) {
unset($elem['1']);        // modify $elem
return $elem;             // and return it to be put into the result
},
$data
);

print_r($clean);
5

вы вносите изменения в подмассив вместо основного, попробуйте это может помочь

foreach ($data as $key => $subArr) {
unset($data[$key][1]);
}
4

попробуй это:

<?php
$data = Array
(
'3463' => Array
(
'0' => 1,
'1' => 2014,
'context' => 'aaa'
),

'3563' => Array
(
'0' => 12,
'1' => 2014,
'context' => 'aaa'
),

'2421' => Array
(
'0' => 5,
'1' => 2014,
'context' => 'zzz'
)
);

foreach ($data as $k=>$subArr) {
foreach ($subArr as $key => $value) {

if ($key == '1') {
unset($data[$k][$key]);
}

}
}
print_r($data);// display the output
3
По вопросам рекламы [email protected]