Удалить / снять все остальные ключи в многомерном массиве, но сохранить ключи

У меня есть длинный многомерный массив с метками времени в качестве ключей, которые содержат массивы значений. Как то так, но с большим количеством временных меток:

array(3) {
[1502609400]=>
array(2) {
["Item1"]=>
array(1) {
["PRICE"]=>
float(100)
}
["Item2"]=>
array(1) {
["PRICE"]=>
float(50)
}
}
[1502611200]=>
array(2) {
["Item1"]=>
array(1) {
["PRICE"]=>
float(200)
}
["Item2"]=>
array(1) {
["PRICE"]=>
float(150)
}
}
[1502613000]=>
array(2) {
["Item1"]=>
array(1) {
["PRICE"]=>
float(500)
}
["Item2"]=>
array(1) {
["PRICE"]=>
float(250)
}
}

Как я могу удалить каждый второй массив массива, не теряя ключи в качестве метки времени? Итак, я в конечном итоге с этим:

array(3) {
[1502609400]=>
array(2) {
["Item1"]=>
array(1) {
["PRICE"]=>
float(100)
}
["Item2"]=>
array(1) {
["PRICE"]=>
float(50)
}
}
[1502613000]=>
array(2) {
["Item1"]=>
array(1) {
["PRICE"]=>
float(500)
}
["Item2"]=>
array(1) {
["PRICE"]=>
float(250)
}
}

Если я использую цикл for и сбрасываю каждую вторую клавишу, я теряю все клавиши и получаю 0, 1, 2 и т. Д. Вместо метки времени.

0

Решение

В цикле проверьте индекс и удалите каждый второй элемент:

Вы можете использовать пользовательские $index переменная, как это:

$index = 0; // points to first element

foreach ($array as $key => $value) {
if ($index % 2 != 0) { //check for un-even
unset($array[$key]);
}

$index++; // move pointer to next element
}
4

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

$i=1 // where the key to remove
$x=0; //loop to determine the key position
foreach ($array as $key=>$value){
if($x==$i){
unset($array[$key]);
}
$x++;
}
1

В этом случае простой foreach может быть более эффективным, чем стандартная функция:

foreach ($array as $key => $val) {
if (array_key_exists('Item2', $val)) {
unset($val['Item2']);
}
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector