簡體   English   中英

刪除/重置多維數組中的所有其他鍵,但保留鍵

[英]Remove/unset every other key in multidimensional array but preserve keys

我有一個長的多維數組,帶有時間戳作為鍵,其中包含值的數組。 像這樣但帶有更多時間戳的東西:

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等(而不是時間戳)結尾。

在循環中,檢查索引並取消設置第二個元素:

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

在這種情況下,簡單的foreach可能比標准函數更高效。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM