删除/取消设置多维数组中的所有其他键但保留键

时间:2017-08-14 09:06:21

标签: php arrays multidimensional-array

我有一个长多维数组,时间戳作为包含值数组的键。这样的东西,但有更多的时间戳:

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等而不是时间戳。

3 个答案:

答案 0 :(得分:4)

在循环中,检查索引并取消设置每个第二个元素:

您可以使用自定义$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
}

答案 1 :(得分:1)

$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++;
}

答案 2 :(得分:1)

在这种情况下,简单的foreach可以比标准函数更有效:

foreach ($array as $key => $val) {
    if (array_key_exists('Item2', $val)) {
        unset($val['Item2']);
    }
}