2012-11-21 148 views
0

我有這個正常的數組名$ ARR .. 並嘗試使用array_push()函數推陣列上的東西..喜歡array_push($arr['alerts_data'], 999); 它產生這樣的輸出:怪異的行爲

Array 
(
    [alerts_data] => Array 
     (
      [0] => 169 
      [1] => 175 
      [2] => 111 
      [3] => 48 
      [4] => 999 
     ) 

) 

當我使用json_encode我:

{"alerts_data":[169,175,111,48,111,999]} 

但是,當我試圖取消設置()的東西從$ ARR像:

unset($arr['alerts_data'][4]);// will remove removes the 999 

,然後再使用json_encode,我得到這個JSON對象

{"alerts_data":{"0":169,"1":175,"2":111,"3":48}} 

什麼在這裏是怎麼回事?你能告訴?我想通過使用unset()函數來實現上面第一個編碼的json。

+3

我無法用上面的確切示例(刪除最後一個數字元素)進行確認。但是如果你刪除了導致數字間隔的數組鍵,你會得到一個對象。 –

+0

使用你的確切例子,我得到'{「alerts_data」:[169,175,111,48]}' –

回答

4

是的,這是因爲數組鍵不再是連續的,所以它被視爲關聯數組,而PHP關聯數組成爲JavaScript對象,因爲JavaScript沒有關聯數組。

使用array_splice()乾淨地從陣列中移除元素。

+1

...和PHP關聯數組成爲JavaScript對象,因爲JavaScript沒有關聯數組。 –

+0

@ÁlvaroG.Vicario:已添加,謝謝。 –

+0

你去了,謝謝你的回答,不知道array_splice()在我的情況下是有用的。 –

2

你的鑰匙有一個空隙(它從3到5),因此必須創建一個對象以使其有效。兩種可能的解決方案:

array_splice($arr['alerts_data'], 4, 1); 

unset($arr['alerts_data'][4]); 
$arr['alerts_data'] = array_values($arr['alerts_data']); 
+0

你有一個很好的方法,謝謝 –