从多维数组中获取值JSON

时间:2018-06-12 12:21:40

标签: mysql arrays json multidimensional-array foreach

我试图在PHP中访问此数组的值。这是一个多维数组。 我需要从数组中获取值并将其插入数据库中。 插入是问题的第二部分。第一部分是从中获取值。

JSON -

{
"itempicture":[
  {
     "status":"3"
  },
  {
     "ItemCode":"001",
     "ItemImage":"image1",
     "ItemCategory":"shirt",
     "ShowOnPOS":"Yes",
     "LastModifiedOn":"2018-06-02 11:53:57"
  },
  {
     "ItemCode":"002",
     "ItemImage":"image2",
     "ItemCategory":"shirt",
     "ShowOnPOS":"Yes",
     "LastModifiedOn":"2018-06-02 11:53:57"
  }]}

这里的“itempicture”是表名,所有键,即'itemcode','itemimage等都是SQL列'“。

我需要获取SQL列的值并将其插入到数据库中。

到目前为止,我已尝试过这个 -

 $data = file_get_contents($url); 
 $json_array = (array)(json_decode($data));

 print_r($json_array);


foreach($user->itempicture as $mydata)

{
     echo $mydata->itempicture . "\n";
     foreach($mydata->itempicture as $values)
     {
          echo $values->itempicture . "\n";
     }
}  

在面向对象的方法中使用MYSQL将其插入到DB中,使用简单的查询,例如“INSERT INTO table_name” VALUES(value1,value2,value3,...)“

因此,表名将是数组中存在的“itempicture”,值将是数组中键的值。

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助。您不希望使用foreach循环遍历属性并打印,而是希望使用它们构建数组以用作准备好的查询的参数,或直接构建查询。但是这会告诉你如何访问这些属性 -

<?php

$j='{
"itempicture":[
  {
     "status":"3"
  },
  {
     "ItemCode":"001",
     "ItemImage":"image1",
     "ItemCategory":"shirt",
     "ShowOnPOS":"Yes",
     "LastModifiedOn":"2018-06-02 11:53:57"
  },
  {
     "ItemCode":"002",
     "ItemImage":"image2",
     "ItemCategory":"shirt",
     "ShowOnPOS":"Yes",
     "LastModifiedOn":"2018-06-02 11:53:57"
  }]}';


  $jo=json_decode($j);

  print("status ".$jo->itempicture[0]->status."\n");
  for($i=1;$i<count($jo->itempicture);$i++){
      foreach($jo->itempicture[$i] as $prop=>$val){
          print($prop." = ".$val."\n");
      }
  }

 ?>

答案 1 :(得分:0)

我在您的代码中看到了一些问题:

  • 您将json_decode($data)的结果转换为数组,然后您尝试使用property-access访问&#34; itempicture&#34;属性。我删除了这个演员。
  • 在第一个foreach中使用变量$user,我猜您打算使用$json_array
  • 内部循环并未真正使用,您可以直接访问属性

修复此问题之后,代码看起来就像那样,并且可以使用您给定的JSON。我刚刚echo编了这些值,因为你没有告诉我们你使用了哪个数据库抽象,但你可以使用这些值来填充数据库。

$data = file_get_contents($url);
$json_array = (json_decode($data));

print_r($json_array);

foreach($json_array->itempicture as $mydata)
{
    if (!property_exists($mydata, 'ItemCode')) {
        // Ignore entries which are invalid (have no ItemCode property)
        continue;
    }
    echo implode(' - ', [
        $mydata->ItemCode,
        $mydata->ItemImage,
        $mydata->ItemCategory,
        $mydata->ShowOnPOS,
        $mydata->LastModifiedOn,
    ]), PHP_EOL;
}