使用foreach循环时出现“非法字符串偏移”

时间:2013-04-27 17:48:07

标签: php arrays json

尝试从我从JSON转换的数组中提取数据时,我收到“警告:非法字符串偏移”错误。

现在我收集到这种情况会在您使用的索引不存在时发生,这让我感到困惑,因为它确实存在并且在我希望直接访问数组值时工作正常。

使用代码$clean = json_decode($json_output, true);将我的JSON解码为数组,如果我使用echo $clean['text'],则“text”的字符串值显示正常。

然而,当我尝试这段代码时,我收到错误:

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

我有种感觉我在某个地方犯了一个愚蠢的错误!

2 个答案:

答案 0 :(得分: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将分配该密钥引用的值。就这么简单,真的

答案 1 :(得分:0)

似乎$list是一个字符串而不是一个数组。因此$list['text']失败。循环中的var_dump($list);会有所帮助。

请注意,如果您遇到此类问题,var_dump()将永远是您的朋友。