PHP,json_decode,数组问题

时间:2011-11-28 21:13:49

标签: php json

我有一个多维关联数组,编码成JSON用于数据库存储,然后解码显示。我无法访问生成的数组元素。

示例JSON字符串:

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

使用json_decode($array, true)解码后(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... 

我已经尝试将options数组保存为自己的PHP变量,同样的事情发生了。我可以print_r()数组(带有嵌套选项数组的原始数据,或只是选项数组),但是当我尝试打印特定元素时,没有任何反应。当我尝试打印元素键时,我得到了PHP错误。

发生了什么事?

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我会像其他人一样使用foreach,但这似乎是你想要做的事情。

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

每个数组都有一个隐藏位置指针,那些旧的数组迭代器函数如key()current()reset()next()等...使用和修改它。 因为php 4引入了foreach构造,很久以前没有人真正使用那些旧的数组迭代器函数了......

答案 2 :(得分: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

答案 3 :(得分: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'
}