【问题标题】:How to create an array for JSON using PHP?如何使用 PHP 为 JSON 创建一个数组?
【发布时间】:2011-10-08 01:35:50
【问题描述】:

我想从 PHP 代码创建一个 json 数组:

[
  {"region":"valore","price":"valore2"},
  {"region":"valore","price":"valore2"},
  {"region":"valore","price":"valore2"}
]

我该怎么做?

【问题讨论】:

标签: php json


【解决方案1】:

我创建了一个粗略而简单的 jsonOBJ 类来用于我的代码。 PHP 不包含像 JavaScript/Node 那样的 json 函数。您必须进行不同的迭代,但可能会有所帮助。

<?php

// define a JSON Object class
class jsonOBJ {
    private $_arr;
    private $_arrName;

    function __construct($arrName){
        $this->_arrName = $arrName;
        $this->_arr[$this->_arrName] = array();

    }

    function toArray(){return $this->_arr;}
    function toString(){return json_encode($this->_arr);}

    function push($newObjectElement){
        $this->_arr[$this->_arrName][] = $newObjectElement; // array[$key]=$val;
    }

    function add($key,$val){
        $this->_arr[$this->_arrName][] = array($key=>$val);
    }
}

// create an instance of the object
$jsonObj = new jsonOBJ("locations");

// add items using one of two methods
$jsonObj->push(json_decode("{\"location\":\"TestLoc1\"}",true)); // from a JSON String
$jsonObj->push(json_decode("{\"location\":\"TestLoc2\"}",true));

$jsonObj->add("location","TestLoc3"); // from key:val pairs

echo "<pre>" . print_r($jsonObj->toArray(),1) . "</pre>";
echo "<br />" . $jsonObj->toString();
?>

将输出:

Array
(
    [locations] => Array
        (
            [0] => Array
                (
                    [location] => TestLoc1
                )

            [1] => Array
                (
                    [location] => TestLoc2
                )

            [2] => Array
                (
                    [location] => TestLoc3
                )

        )

)


{"locations":[{"location":"TestLoc1"},{"location":"TestLoc2"},{"location":"TestLoc3"}]}

要迭代,转换为普通对象:

$myObj = $jsonObj->toArray();

然后:

foreach($myObj["locations"] as $locationObj){
    echo $locationObj["location"] ."<br />";
}

输出:

TestLoc1
TestLoc2
TestLoc3

直接访问:

$location = $myObj["locations"][0]["location"];
$location = $myObj["locations"][1]["location"];

一个实际的例子:

// return a JSON Object (jsonOBJ) from the rows
    function ParseRowsAsJSONObject($arrName, $rowRS){
        $jsonArr = new jsonOBJ($arrName); // name of the json array

        $rows = mysqli_num_rows($rowRS);
        if($rows > 0){
            while($rows > 0){
                $rd = mysqli_fetch_assoc($rowRS);
                $jsonArr->push($rd);
                $rows--;
            }
            mysqli_free_result($rowRS);
        }
        return $jsonArr->toArray();
    }

【讨论】:

    【解决方案2】:

    这就是我在下面@tdammers 提供的解决方案的帮助下能够做到的。 以下行将放在 foreach 循环中。

    $array[] = array('power' => trim("Some value"), 'time' => "time here" );
    

    然后用json编码函数对数组进行编码

    json_encode(array('newvalue'=> $array), 200)
    

    【讨论】:

      【解决方案3】:

      只需输入这一行就会给你一个 json 数组,

      echo json_encode($array);

      通常您使用json_encode 从 ios 或 android 应用程序读取数据。所以请确保除了准确的 json 数组之外不要回显任何其他内容。

      【讨论】:

        【解决方案4】:

        对于数组也可以使用简短的注释:

        $arr = [
            [
                "region" => "valore",
                "price" => "valore2"
            ],
            [
                "region" => "valore",
                "price" => "valore2"
            ],
            [
                "region" => "valore",
                "price" => "valore2"
            ]
        ];
        
        echo json_encode($arr);
        

        【讨论】:

          【解决方案5】:

          每次在 php 中创建 json 的最佳方法是首先转换 ASSOCIATIVE 数组中的值。

          之后,只需使用json_encode($associativeArray) 进行简单编码。我认为这是在 php 中创建 json 的最佳方式,因为每当我们在 php 中获取结果形式的 sql 查询时,大多数时候我们使用fetch_assoc 函数获取值,该函数也返回一个关联数组。

          $associativeArray = array();
          $associativeArray ['FirstValue'] = 'FirstValue';
          

          ... 等等

          在那之后。

          json_encode($associativeArray);
          

          【讨论】:

            【解决方案6】:

            使用PHP原生的json_encode,像这样:

            <?php
            $arr = array(
                array(
                    "region" => "valore",
                    "price" => "valore2"
                ),
                array(
                    "region" => "valore",
                    "price" => "valore2"
                ),
                array(
                    "region" => "valore",
                    "price" => "valore2"
                )
            );
            
            echo json_encode($arr);
            ?>
            

            更新:在评论中回答您的问题。你这样做:

            $named_array = array(
                "nome_array" => array(
                    array(
                        "foo" => "bar"
                    ),
                    array(
                        "foo" => "baz"
                    )
                )
            );
            echo json_encode($named_array);
            

            【讨论】:

            • 对不起,如果我想要 {"nome_array": [{"foo":"bar"},{"foo":"baz"}]} ??
            【解决方案7】:

            简单:只需创建一个(嵌套的)PHP 数组并在其上调用json_encode。数字数组转换为 JSON 列表 ([]),关联数组和 PHP 对象转换为对象 ({})。示例:

            $a = array(
                    array('foo' => 'bar'),
                    array('foo' => 'baz'));
            $json = json_encode($a);
            

            给你:

            [{"foo":"bar"},{"foo":"baz"}]
            

            【讨论】:

            • 对不起,如果我想要 {"nome_array": [{"foo":"bar"},{"foo":"baz"}]} ??
            • 再次阅读我的帖子。如果您想将某些内容转换为 JSON 对象,请在 PHP 中将其设为关联数组(其中键是字符串)。如果您希望它转换为 JSON 列表,请将其设为普通数组(带有隐式整数键)。每个数组元素的值又可以是一个数组,这就是你想要的。
            【解决方案8】:

            简单的peasy柠檬榨汁:http://www.php.net/manual/en/function.json-encode.php

            <?php
            $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
            
            echo json_encode($arr);
            ?>
            

            andyrusterholz at g-m-a-i-l dot c-o-m 在上述页面上有一个帖子,它也可以处理复杂的嵌套数组(如果你喜欢的话)。

            【讨论】:

              猜你喜欢
              • 2020-07-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-04-19
              • 1970-01-01
              • 1970-01-01
              • 2013-04-14
              • 2022-01-18
              相关资源
              最近更新 更多