【问题标题】:Looping through a JSON in PHP在 PHP 中循环 JSON
【发布时间】:2016-10-03 04:44:34
【问题描述】:

我正在尝试遍历我发布到我的 PHP 后端的 JSON。 JSON 看起来像这样:

[
    {
        "number":"5613106"
    },
    {
        "number":"56131064" 
    },
    {
        "number":"56131063" 
    }
]

我是这样从 Postman 发布的:

我希望能够打印我使用

单独发布的每个号码
echo $number;

现在,当我使用以下内容时,它只会打印最后一个数字:

$number = $json['number'];
echo $number;

我的功能:

public function check_users_post()
{
    $json = $this->request->body;
    print_r($json);
    $this->response($json, REST_Controller::HTTP_OK);
}

输出:

Array
(
    [0] => Array
        (
            [number] => 5613106
        )

    [1] => Array
        (
            [number] => 56131064
        )

    [2] => Array
        (
            [number] => 56131063
        )

)

【问题讨论】:

标签: php json codeigniter


【解决方案1】:

希望这个通用迭代器对您有所帮助。

$jsonIterator = new RecursiveIteratorIterator(
        new RecursiveArrayIterator(json_decode($json, TRUE)),
        RecursiveIteratorIterator::SELF_FIRST);


foreach ($jsonIterator as $key => $val) {
    if(is_array($val)) {
        echo "$key:\n";
    } else {
        echo "$key => $val\n";
    }
}

【讨论】:

  • 我使用了您的部分答案来得出我的最终答案。谢谢!
【解决方案2】:

使用

json_decode()

PHP 内置函数将 json 解码回 PHP 变量或数组,然后循环遍历每个索引并打印数字。

【讨论】:

  • 当我尝试 json_decode($json) 我收到:消息:json_decode() 期望参数 1 是字符串,给定数组。我不是已经通过 Postman 发送 json 了吗?
  • @RutgerHuijsmans 如果你这样做,你已经在读取 JSON 解码了,所以发布你的完整代码,然后做print_r($json); 看看$json 里面有什么,因为它似乎已经是一个数组...
  • @P0lT10n 添加了我的完整功能
  • 好的。这是tric:请不要使用json_decode(),只需循环遍历数组并使用索引访问元素。 foreach($json as $item=> $val) { echo $val; }
【解决方案3】:

这样搞定了:

public function check_users_post()
{
    $json = $this->request->body;

    $jsonIterator = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($json),
        RecursiveIteratorIterator::SELF_FIRST);

    $phone_numbers = "";

    foreach ($jsonIterator as $key => $val) {
        if(is_array($val)) {

        } else {
            $phone_numbers = "$phone_numbers" . ", " . "$val";
        }
    }

    $phone_numbers = substr($phone_numbers, 2);
    $phone_numbers = "(" . $phone_numbers . ")";

    $query = $this->db->query("SELECT * FROM users WHERE user_number in $phone_numbers;");
    $result = $query->result();
    $this->response($result, REST_Controller::HTTP_OK);

    if (mysql_num_rows($result)==0) {
        $data = [ 'message' => 'No users returned'];
        $this->response($data, REST_Controller::HTTP_BAD_REQUEST);
    } else {
        $this->response($result, REST_Controller::HTTP_OK);
    }
}

【讨论】:

    【解决方案4】:

    说明

    首先将您的 JSON 字符串化,然后使用 JSON_DECODE() 函数为您提供数组,然后使用 foreach 循环在该数组上迭代,这将为您提供您想要回显的每个键。

    代码

                 $str = '[
                      {
                       "number":"5613106"
                      },
                      {
                       "number":"56131064"  
                      },
                      {
                       "number":"56131063"  
                      }
                   ]';
                $array = json_decode($str, true);
                echo "<pre>";
                foreach ($array as $key => $key_value) { // then loop through it
                    echo "<br>";
                    echo $array[$key]['number'];
                    echo "<br>";
               }
    

    输出

    5613106
    
    56131064
    
    56131063
    

    【讨论】:

    • 如何字符串化我的 JSON?
    • 你现在可以根据我的回答来测试了。
    猜你喜欢
    • 2014-05-18
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多