2017-08-14 71 views
0

我有一個長時間的多維數組,其中包含時間戳作爲包含值數組的鍵。事情是這樣的,但更多的時間戳:刪除/取消多維數組中的其他鍵但保留鍵

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

在循環中,只需檢查索引,然後取消設置第二個元素: –

回答

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 
} 
+0

感謝您的快速回復,但$ key將例如爲1502611200。所以這是行不通的,因爲它可以被2整除。 – ubik

+0

增加了自定義的$ index變量來單獨維護它,只是爲了找出偶數/奇數元素。 –

+0

只是想說,因爲我結合你的答案和@Osama的:) 謝謝@M Idrees這個很好用! 標記爲正確。 – ubik

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

非常感謝!這工作完美。沒有考慮添加一個很有意義的計數器。 *編輯:對不起,這不適用於更長的陣列。我誤解了什麼? – ubik

+0

爲什麼在你想要修改第一個元素時迭代整個數組? – localheinz

+0

根據同樣的想法,你可以做到這一點,每秒的項目必須是1,3,5,6,如果你需要幫助,計數器必須小於陣列數量我可以編輯代碼或者如果你可以自己做 – Osama

1

在那種情況下,一個簡單的foreach可以比標準功能更有效率地穿孔:

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