2013-04-27 103 views
0

嘗試從我從JSON轉換的數組中提取數據時,出現「Warning:Illegal string offset」錯誤。使用foreach循環時出現「非法字符串偏移」

現在我收集這種情況時,你正在使用的索引不存在,這令我感到困惑,因爲它確實存在,並且當我希望直接訪問數組值時工作正常。

我的JSON使用代碼$clean = json_decode($json_output, true);解碼成數組,如果我使用echo $clean['text'],'text'的字符串值顯示正常。

然而,當我試圖這段代碼我得到的錯誤:

foreach ($clean as $key => $list){ 
$output .= $list['text'];} 

我有一種感覺,我想提出一個愚蠢的錯誤的地方!

+0

請檢查數組的結構與'print_r($乾淨)'; – 2013-04-27 17:52:52

回答

0

看起來$list是一個字符串而不是數組。因此$list['text']失敗。 var_dump($list);循環內將有所幫助。

請注意,var_dump()將永遠是你的朋友,如果你遇到這樣的問題。

1

使用$list['text']您實際上訪問的值爲$clean['text'],顯然是字符串"text"。只是,您正在訪問它,就好像它是一個關聯數組 - 實際上與$clean完全一樣。試試這個:

foreach ($clean as $key => $list) 
{ 
    if ($key === 'text') 
    {// only echo for $clean['text'] 
     echo 'array clean, key: '.$key.' => '.$list."\n"; 
     continue;//next 
    } 
    echo $key.' => '.$list."\n";//shows all other key-value pairs 
} 

這應該澄清一些事情你:$key會認爲$clean成立,包括text$list將被分配由該鍵引用的值的所有鍵。這是如此簡單,真的

+0

請注意,您的答案是錯誤的!如果'$ clean'是一個字符串,那麼會有一個不同的錯誤信息:'警告:提供給foreach()的無效參數' – hek2mgl 2013-04-27 17:54:27

+0

@ hek2mgl:我不是說'$ clean'是一個字符串,這是一個關聯數組,'$ list'是OP正在訪問的字符串,就好像它是'$ clean'一樣......我試圖簡潔,但是我會編輯,因爲我明白了你爲什麼會認爲我的意思不是。 – 2013-04-27 18:02:39

+0

@ hek2mgl:對不起,但添加_「沒有意義,」謝謝hek2mgl指出我的原始答案令人困惑「_。實質上,兩者都說同樣的事情。 – 2013-04-27 18:34:53