我有来自nosql
的2个json数据。如果搜索字词在$array1
中匹配,则首先匹配,获取item number
然后将item number
放入$array2
,获取自定义搜索需求的价格。但我的代码会导致Invalid argument supplied for foreach()
foreach($json2[$num] as $data2)
$str = 'paper';
$array1 = '[{"a":"1","b":"book"},{"a":"2","b":"paper"}]';
$array2 = '[{"1":["17.00","22.00"]},{"2",["4.50","6.00"]}]';
$json1 = json_decode($array1);
$json2 = json_decode($array2,true);
foreach($json1 as $data1){
if(preg_match('#'.$data1->b.'#',$str,$match)){
$num = $data1->a; // $num = 2
}
}
foreach($json2[$num] as $data2){
foreach($data2 as $newdata){
echo $newdata.'<br />'; // 4.50, 6.00
}
}
答案 0 :(得分:0)
如果您评论中的$num = 2
是正确的,那么您将访问$json2
中的第三个元素,但您不能,因为只有两个元素。
<强>更新强>
哎呀,我怎么会错过这个?你的$array2
已经有了索引,你只是没有正确加载它们。您只需循环浏览$array2
并查找密钥即可。但是,更好的解决方案是通过将$array2
填充为字典而不是列表来正确加载数据。
答案 1 :(得分:0)
首先关闭$array2
的JSON无效。它应该是:
[{"1":["17.00","22.00"]},{"2":["4.50","6.00"]}]
-----------------------------^
This should be a ":", not a ","
您的JSON实际上是一个对象数组(数组)。 var_dump($json2);
显示了这一点。
array(2) {
[0]=>
array(1) {
[1]=>
array(2) {
[0]=>
string(5) "17.00"
[1]=>
string(5) "22.00"
}
}
[1]=>
array(1) {
[2]=>
array(2) {
[0]=>
string(4) "4.50"
[1]=>
string(4) "6.00"
}
}
}
你需要像这样循环:
foreach($json2 as $data2){
if(array_key_exists($num, $data2)){
$data2 = $data2[$num];
foreach($data2 as $newdata){
echo $newdata.'<br />'; // 4.50, 6.00
}
}
}