2011-11-28 108 views
1

我有一個多維聯合數組,編碼成JSON數據庫存儲,然後解碼顯示。我無法訪問結果數組元素。PHP,json_decode,數組問題

一個例子JSON字符串:

{ 
    "service": "Star Break Repair", 
    "options": { 
     "Buy with me -60": "-60.00", 
     "Bulseye Break Repair": "30.00" 
    } 
} 

使用json_decode($array, true)(真正得到一個數組,而不是一個對象)解碼之後,我得到預期的數組:

Array 
(
    [service] => Star Break Repair 
    [options] => Array 
     (
      [Buy with me -60] => -60.00 
      [Bulseye Break Repair] => 30.00 
     ) 

) 

但是當我嘗試並回顯特定元素:

echo @key($services['options'][0]); 

echo $services['options'][0]; 

我什麼也沒有,一片空白。

當我嘗試:

key($services['options'][0]) 

我得到這個錯誤:

key() [function.key]: Passed variable is not an array or object in... 

我試過保存選項數組作爲自己的PHP變量,同樣的事情發生。我可以print_r()要麼數組(原始嵌套選項數組,或只是選項數組),但是當我嘗試打印一個特定的元素,沒有任何反應。當我嘗試打印元素鍵時,我得到了這個PHP錯誤。

發生了什麼事?

+0

我想出於某種原因,有一種方法可以通過索引整數訪問關聯數組元素。好吧。無論如何,結束了對陣列的foreach。感謝大家的幫助。 – AVProgrammer

回答

0

問題是你的關聯數組是options,而不是整數索引數組。

因此,如果您要訪問的options你需要它們的字符串鍵引用它們的元素:

$foo = $services['options']['Buy with me -60']; 
$bar = $services['options']['Bulseye Break Repair']; 

現在,如果你不知道鍵,你可以使用foreach循環遍歷你的選擇陣列:

foreach($services['options'] as $okey=>$oval) { 
    echo $okey; //'Buy with me -60', 'Bulseye Break Repair' 
    echo $oval; //'-60.00', '30.00' 
} 
+0

這最終是我做到的。我想出於某種原因,有一種方法可以通過索引整數訪問關聯數組元素。好吧。 – AVProgrammer

+3

這個答案看起來和以前的答案很相似。 – nickb

+0

@nickb不知道你在暗示什麼。我收到了在我寫回答時發佈答案的通知,但顯然直到我發佈我的答案之前我纔看到答案。所以,如果你暗示我重寫了早期的答案,我強烈建議你重新考慮你的立場。 –

3

該鍵不存在:

echo $services['options'][0]; 

用途:

echo $services['options']['Buy with me -60']; 
echo $services['options']['Bulseye Break Repair']; 

編輯:要打印$services['options']元素不知道自己的鑰匙,只需使用foreach循環:

foreach($services['options'] as $key => $value) 
{ 
    echo $value; 
} 
+0

如何在不知道按鍵和沒有foreach循環的情況下打印這些元素?他們將一直在變化。 – AVProgrammer

+0

@AVProgrammer你可以使用'foreach($ services ['options']作爲$ key => $ value)來循環遍歷它們'' – jeroen

+0

@AVProgrammer - 我已經用一個循環更新了我的答案,不管鍵。 – nickb

0

檢查的方式,您所訪問的元素

<?php 

$foo = '{"service":"Star Break Repair","options":{"Buy with me -60":"-60.00","Bulseye Break Repair":"30.00"}}'; 

$arr = json_decode($foo, true); 

var_dump($arr); 

echo $arr['options']['Bulseye Break Repair']; //30.00 
1

我只想用的foreach像其他人一樣貼了,但是這似乎有點什麼你要怎樣做。

echo key($services['options']); 
next($services['options']); 
echo key($services['options']); 

每個陣列具有一個隱藏位置指示器,和那些舊陣列迭代器功能,如鍵()電流()復位()的next()等...使用並修改它。 自從php 4引入了很久以前的foreach構造之後,沒有人真正使用這些舊的數組迭代器函數......