Я получил многомерный массив. Из каждого подмассива я хотел бы удалить / сбросить значения с индексом 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]);
}
}
}
Извините, если эта проблема тривиальна для вас, ребята.
Простой способ!?
Вы можете сделать это только с одним foreach!
foreach ($data as $key => $subArr) {
unset($subArr['1']);
$data[$key] = $subArr;
}
Это не работает, потому что $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);
вы вносите изменения в подмассив вместо основного, попробуйте это может помочь
foreach ($data as $key => $subArr) {
unset($data[$key][1]);
}
попробуй это:
<?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