2014-02-12 64 views
-1

這是我從我的SQL選擇中獲得的。數據是正確的,現在我想用foreach來回應它。混合了JSON和數組(在PHP中)

Array ([0] => stdClass Object ([sql_column] => [{"1":"value1", "2":"value2", "3":"value3"}])) 

我試過什麼(沒有工作)爲:

$obj = json_decode($arr); 
foreach($obj as $data){ 
echo $data->sql_column->1; //this should echo "value1", but it doesn't 
} 

有誰看到我的錯誤?提前致謝!

+0

您不應該將JSON保存到mysql中,湖 – moonwave99

+0

@moonwave爲什麼是這樣?如果你提到一個序列化數組,當它包含特殊數據時可能包含特殊或空字符,那麼你可能是對的,但是是一個json數組?解釋你自己! –

+1

@FélixGagnon-Grenier,因爲您使用_relational_數據庫爲了規範化數據 - 如果您計劃好存儲JSON字符串,最終會得到一個非規範化的模式[即不可測,不可]。不同的是,如果你需要存儲一小部分數據,那麼這是可以接受的。 – moonwave99

回答

1

如果$arr是你發佈的數組,那麼你不能json_decode它,因爲它是一個數組而不是JSON字符串。

//First you need to get the string 
$json = $arr[0]->sql_column; 
//Then decode 
$data = json_decode($json); 
//Then loop 
foreach($data as $key => $value){ 
    echo "$key = $value \n"; 
} 
1

您的JSON看起來是複雜(雙維數組),但你可以用這種方式獲取從它的值:

foreach($arr as $data){ 
    $json = json_decode($data->sql_column); 
    $temp = (array)$json[0]; 
    foreach($temp as $k=>$v){ 
     print($v."<br/>"); 
    } 
} 

我希望你拿個主意......

我使用foreach for $ arr來覆蓋多個值,如果您想要,可以省略:

$data=$arr[0];  
$json = json_decode($data->sql_column); 
$temp = (array)$json[0]; 
foreach($temp as $k=>$v){ 
print($v."<br/>"); 
}