Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Json - Fatal编程技术网

Php 如何从特定键的JSON字符串中检索数据

Php 如何从特定键的JSON字符串中检索数据,php,arrays,json,Php,Arrays,Json,我正在使用php解码一个JSON文件,并试图只从ID为1234的数组中获取内容 例如: [ { "id":"1234", "is_printed":"1", "is_refunded":"1", "order_products":[ { "id":"xyz", "order_id":"xyz", "date_created":"3434"

我正在使用php解码一个JSON文件,并试图只从ID为1234的数组中获取内容

例如:

  [
   {
      "id":"1234",
      "is_printed":"1",
      "is_refunded":"1",
      "order_products":[
         {
            "id":"xyz",
            "order_id":"xyz",
            "date_created":"3434"
         }
      ]
   },

      {
      "id":"8910",
      "is_printed":"1",
      "is_refunded":"1",
      "order_products":[
         {
            "id":"abcde",
            "order_id":"abcde",
            "date_created":"3434"
         }
      ]
   }

 ]
我只想从订单产品中检索订单id,其中id为1234


因此,我应该只获取xyz,而不是xyz和abcde。

您可以循环,然后获取您想要的,确保您正确检查了级别:

$jv = json_decode($v);

foreach ($jv as $t) {
   if ($t->id == 1234) {
      print $t->order_products[0]->order_id;
   }
}
注意,我使用first将JSON字符串$v转换为php可以处理的内容

如何知道print$t->order\u products[0]->order\u id;要查看的索引是什么?我拿走了你的JSON,var_把它扔了。然后,通过跟踪输出的结构,您可以看到所需的索引是什么

查看包含数据的完整工作代码:

$v='  [
{
    "id":"1234",
    "is_printed":"1",
    "is_refunded":"1",
    "order_products":[
        {
            "id":"xyz",
            "order_id":"xyz",
            "date_created":"3434"
        }
    ]
},

    {
    "id":"8910",
    "is_printed":"1",
    "is_refunded":"1",
    "order_products":[
        {
            "id":"abcde",
            "order_id":"abcde",
            "date_created":"3434"
        }
    ]
}

]';

$jv = json_decode($v);

foreach ($jv as $t) {
   if ($t->id == 1234) {
      print $t->order_products[0]->order_id;
   }
}

var_dump($jv);
它返回:

输出:

xyz
转储:


可以使用foreach并循环数组

foreach ($yourArray AS $rowInArray) {
 if ($rowInArray['id'] == 1234 {
   //save the value to a global array
  }
}

另一个选项是使用array_column函数。我以前没有使用过这个,但您可以在这里找到有关语法的信息:

使用前面的所有答案,这是您的完整代码:

$orderId = array();
$data = json_decode($jsonString);
foreach ($data as $row) {
    if ($row['id'] == 1234) {
        $orderId[] = $row['order_products']['order_id'];
    }
}

json_解码并通过它foreach。您的json中有语法错误,即使您吃完晚饭或子数组,也会使用逗号“,”foreach修复了我的一个问题,但如何检索order_产品下的order_id?我试过你说的话,但没用。这不是一个php错误,只是一个空白。你有没有试过事先使用json_解码?它应该会成功的。另外,尝试使用var_dump$array来查看其中的内容。使用代码echo$object->{'order_products'};它显示数组,但回显$object->{'order\u products'}{'order\u id'};不起作用。niether做的版本是$object['order_products']['order_id'];如果你说$object->{'order\u products'}['order\u id'],会怎么样?第二个[]不是{}。什么都没有。这就像代码在工作,但是数组中没有任何东西——除了数组中有一些东西这一事实。
$orderId = array();
$data = json_decode($jsonString);
foreach ($data as $row) {
    if ($row['id'] == 1234) {
        $orderId[] = $row['order_products']['order_id'];
    }
}