Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP,json_解码,数组问题_Php_Json - Fatal编程技术网

PHP,json_解码,数组问题

PHP,json_解码,数组问题,php,json,Php,Json,我有一个多维关联数组,它被编码成JSON用于数据库存储,然后解码显示。访问结果数组元素时遇到问题 JSON字符串示例: { "service": "Star Break Repair", "options": { "Buy with me -60": "-60.00", "Bulseye Break Repair": "30.00" } } 使用json\u decode($array,true)(true获取数组,而不是对象)对其进行解

我有一个多维关联数组,它被编码成JSON用于数据库存储,然后解码显示。访问结果数组元素时遇到问题

JSON字符串示例:

{
    "service": "Star Break Repair",
    "options": {
        "Buy with me -60": "-60.00",
        "Bulseye Break Repair": "30.00"
    }
}
使用
json\u 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]);

我什么都没有,布兰克

当我尝试:

key($services['options'][0])
我得到这个错误:

key() [function.key]: Passed variable is not an array or object in... 
我尝试将options数组保存为它自己的PHP变量,同样的情况也发生了。我可以
print\u r()
任意数组(原始数组带有嵌套的选项数组,或仅打印选项数组),但当我尝试打印特定元素时,什么都不会发生。当我尝试打印元素键时,会出现PHP错误


发生了什么事?

此密钥不存在:

echo $services['options'][0];
使用:

编辑:要打印
$services['options']
中的元素而不知道它们的键,只需使用foreach循环:

foreach( $services['options'] as $key => $value)
{
    echo $value;
}

此密钥不存在:

echo $services['options'][0];
使用:

编辑:要打印
$services['options']
中的元素而不知道它们的键,只需使用foreach循环:

foreach( $services['options'] as $key => $value)
{
    echo $value;
}

检查访问元素的方式

<?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

检查访问元素的方式

<?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

问题在于您的
选项有一个关联数组,而不是一个整数索引数组

因此,如果要访问
选项的元素
,则需要通过其字符串键引用它们:

$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'
}

问题是您的
选项有一个关联数组,而不是一个整数索引数组

因此,如果要访问
选项的元素
,则需要通过其字符串键引用它们:

$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'
}

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

echo key($services['options']);
next($services['options']);
echo key($services['options']);
每个数组都有一个隐藏的位置指针,那些旧的数组迭代器函数如key()current()reset()next()等。。。使用并修改它。
自从PHP4引入foreach构造以来,再也没有人真正使用那些旧的数组迭代器函数了,这是很久以前的事了…

我只想像其他帖子一样使用foreach,但这似乎是您正在尝试的

echo key($services['options']);
next($services['options']);
echo key($services['options']);
每个数组都有一个隐藏的位置指针,那些旧的数组迭代器函数如key()current()reset()next()等。。。使用并修改它。

自从PHP4引入foreach构造(这是很久以前的事了)以来,再也没有人真正使用那些旧的数组迭代器函数了。

如何在不知道键和foreach循环的情况下打印这些元素?它们总是在变化。@AVProgrammer您可以使用
foreach($key=>services['options']as$key=>value)在它们之间循环。
@AVProgrammer-我已经用一个循环更新了我的答案,该循环打印值,而不考虑键。
var\u dump(array\u keys($arr['options'])
@AVProgrammer您可以执行foreach($key=>value)的
echo“$key:$value
\n”
打印所有这些内容,或
echo$services['options'][key($services['options'])
打印数组指针当前所在的元素。如何在不知道键和foreach循环的情况下打印这些元素?它们总是在变化。@AVProgrammer您可以使用
foreach($key=>services['options']as$key=>value)在它们之间循环。
@AVProgrammer-我已经用一个循环更新了我的答案,该循环打印值,而不考虑键。
var\u dump(array\u keys($arr['options'])
@AVProgrammer您可以执行foreach($key=>value)的
echo“$key:$value
\n”
打印所有这些内容,或
echo$services['options'][key($services['options'])
打印数组指针当前所在的位置。这就是我最终的操作方式。出于某种原因,我认为有一种方法可以通过索引整数访问关联数组元素。哦,好吧。这个答案看起来和之前的答案非常相似。@nickb不确定你在这里的意思。我在写我的答案的时候收到了一个通知,说答案已经发布了,但是很明显,直到我发布了我的答案之后,我才看到它们。因此,如果你是在暗示我重复了先前的答案,我强烈建议你重新考虑你的立场。@nickb如果你实际上是在暗示我抄袭了你的答案,那么很可能值得注意的是,我在你更新你的答案之前2分钟发布了我的答案。这就是我最终的做法。出于某种原因,我认为有一种方法可以通过索引整数访问关联数组元素。哦,好吧。这个答案看起来和之前的答案非常相似。@nickb不确定你在这里的意思。我在写我的答案的时候收到了一个通知,说答案已经发布了,但是很明显,直到我发布了我的答案之后,我才看到它们。所以,如果你是在暗示我重复先前的回答,我强烈建议你重新考虑你的立场。@nickb如果你是在暗示我抄袭了你的回答,可能值得注意的是,我在你更新答案前2分钟发布了我的答案。出于某种原因,我认为有一种方法可以通过索引整数访问关联数组元素。哦,好吧。最后在数组上做了一个foreach。谢谢大家的帮助。我想出于某种原因,有一种方法可以通过索引整数访问关联数组元素。哦,好吧。最后在数组上做了一个foreach。谢谢大家的帮助。