我有一些Json从facebook返回,然后我使用json _decode解析为一个数组。数据最终看起来像这样(这只是我感兴趣的片段):
( [data] =>
Array ( [0] =>
Array (
[id] => 1336269985867_10150465918473072
[from] =>
Array ( [name] => a name here
[category] => Community
[id] => 1336268295867 )
[message] => A message here
现在我已经能够迭代这些数据并得到我需要的东西:
$jsonDecoded = json_decode($json, true);
$xmlOutput = '<?xml version="1.0"?><data><items>';
foreach ($jsonDecoded as $e) {
foreach ($e as $i) {
$xmlOutput .= '<item><timestamp>' . $i['created_time'] . '</timestamp><title><![CDATA[ ' . $i['message'] .' ]]></title><link>' . $link . '</link><type>facebook</type></item>';
}
}
$xmlOutput .= '</items></data>';
..直到现在我需要检查from-&gt; id值。
我在第二行中添加了这一行:
foreach ($e as $i) {
if($i['from']['id'] == '1336268295867') {
但这只是给我一个错误:
致命错误:无法在/ Users / Desktop / Webs / php / getFeeds中使用字符串偏移作为数组
任何想法为什么?我确定这是获得该值的正确方法,实际上如果我在循环中回应这个而不是上面的if语句我得到了值:
$jsonDecoded = json_decode($json, true);
$xmlOutput = '<?xml version="1.0"?><data><items>';
foreach ($jsonDecoded as $e) {
foreach ($e as $i) {
echo $i['from']['id']
这会返回从facebook返回的代码中的所有from-&gt; id值,然后我会收到错误:
133626829985867133626829985867133626829985867133626829985867195501239202133626829985867133626829985867133626829985867133626829985867133626829985867
致命错误:无法在 97 /Users/Desktop/Webs/php/getFeeds.php 中将字符串偏移量用作数组>
(第97行是回声线)
答案 0 :(得分:2)
在我看来(根据最后的代码片段)在某些时候你的$ i不再是一个数组了。尝试做:
$jsonDecoded = json_decode($json, true);
$xmlOutput = '<?xml version="1.0"?><data><items>';
foreach ($jsonDecoded as $e) {
foreach ($e as $i) {
if(is_array($i))
echo $i['from']['id']
答案 1 :(得分:2)
你的代码对$ i ['from'] ['id']做了很多假设,并且至少有一个条目对于至少一个条目是不正确的。
让我们添加一些测试:
$jsonDecoded = json_decode($json, true);
$xmlOutput = '<?xml version="1.0"?><data><items>';
foreach ($jsonDecoded as $e) {
if ( !is_array($e) ) {
die('type($e)=='.gettype($e).'!=array');
}
foreach ($e as $i) {
if ( !is_array($i) ) {
die('type($i)=='.gettype($i).'!=array');
}
else if ( !array_key_exists('from', $i) ) {
die('$i has no key "from"');
}
else if ( !is_array($i['from']) ) {
die('type($i["from"])=='.gettype($i['from']).'!=array');
}
else if ( !array_key_exists('id', $i['from']) ) {
var_dump($i);
die('$i["from"] has no key "id"');
}
echo $i['from']['id'];
}
}
然后,您可以在var_dump(...)
之前添加die(...)
来查看实际数据。