PHP,json_解码,数组问题
我有一个多维关联数组,它被编码成JSON用于数据库存储,然后解码显示。访问结果数组元素时遇到问题 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获取数组,而不是对象)对其进行解
{
"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。谢谢大家的帮助。