php json解码导致另一个json解码

时间:2011-12-28 20:33:41

标签: php json

我有来自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
    }
}

2 个答案:

答案 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
      }
    }
}