使用php

时间:2016-09-10 08:45:31

标签: php foreach

我是php的新手。所以它可能是非常基本但我不知道。所以,我想在php中使用json_encode()输出。

"option": [
    {
      "poOptionGroup": "11",
      "optGrpID": "11",
      "optGrpName": "Choose Backing Material"
    },
    {
      "optID": "40",
      "optName": "Black (Plexiglass)",
      "optPriceDiff": "0"
    },
    {
      "optID": "41",
      "optName": "Clear (Plexiglass)",
      "optPriceDiff": "18"
    },
    {
      "optID": "218",
      "optName": "Neon Stand Off",
      "optPriceDiff": "18"
    },
    {
      "optID": "219",
      "optName": "White Plastic",
      "optPriceDiff": "18"
    }
  ],
  "option": [
    {
      "poOptionGroup": "13",
      "optGrpID": "13",
      "optGrpName": "Any notes you want to include with your order"
    },
    {
      "optID": "174",
      "optName": "NO Thanks",
      "optPriceDiff": "0"
    },
    {
      "optID": "175",
      "optName": "YES OUTDOOR",
      "optPriceDiff": "170"
    }
  ],
  "SPIN3": [
    {
      "poOptionGroup": "56",
      "optGrpID": "56",
      "optGrpName": "Upgrade to OUTDOOR"
    },
    {
      "optID": "44",
      "optName": "",
      "optPriceDiff": "20.02"
    }
  ]

为此我有两个嵌套的foreach循环。如下:

$product=array();   
        foreach($query as $q){
            $product['optGrpID']= $q['optGrpID'];
            $product['optGrpName'] = $q['optGrpName'];
            $product['poOptionGroup'] = $q['poOptionGroup'];
            $opt_id=$product['optGrpID'];
                $string=  sql("select optID, optName, optPriceDiff from options where optGroup='$opt_id' ");
                foreach ($string as $k=>$s){
                    $product['options']['optID']=$s['optID'];
                    $product['options']['optName']=$s['optName'];
                    $product['options']['optPriceDiff']=$s['optPriceDiff'];
                }
        }       

那么如何实现这个理想的输出呢?请帮忙。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我正在编写PHP JSON API的过程中,所以我在过去几天遇到了类似的问题。虽然我不能/不想解决有关PHP代码的特定问题,但这是我学到的最重要的事情,我在许多文档或教程中找不到:

json_encode()一个关联数组生成一个{key: value, key: value, ...}的JSON对象。给它一个非关联数组会产生一个[value, value, value, ...]的JSON列表。后一版本中的值当然可以是他们自己的对象({...})。这意味着要获得所需的结构,必须将以下数组传递给json_encode:

array(
    "option" => array(
        array(
            "optId" => "40",
            "optName": "Black (Plexiglass)",
            "optPriceDiff": "0"
        ),
        array(
            "optId" => "40",
            "optName": "Black (Plexiglass)",
            "optPriceDiff": "0"
        ),
        .......
    ),
    "SPIN3" => array(
        array(
            "poOptionGroup" => "56",
            "optGrpID" => "56",
            "optGrpName" => "Upgrade to OUTDOOR"
        ),
        array(
            "optID" => "44",
            "optName" => "",
            "optPriceDiff" => "20.0"
        )
    )
);

正如您所看到的,其中一些数组是关联数组,其中一些是非关联数组,充当“简单列表”。知道了这一点,应该很容易修改PHP代码以生成如上所示的数组并将其传递给json_encode()。除非强制json_encode()始终生成带有标志的JSON对象,否则PHP将处理转换为JSON对象和JSON列表,如上所示。

对于正确的术语:“list”是指JSON数组,而关联数组则使用string-value-links转换为JSON对象。有关详细信息,请参阅JSON website