【问题标题】:JSON : Fetch Particular row from an array using phpJSON:使用 php 从数组中获取特定行
【发布时间】:2019-04-15 09:00:35
【问题描述】:

您好,我正在尝试从我拥有的 JSON 格式中获取特定数据。 我正在使用预构建的 json 进行练习。

JSON格式是这样的:

[
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio 
 reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et 
cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt   
rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor 
beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil 
molestiae 
ut reiciendis\nqui aperiam non debitis possimus qui neque nisi nulla"
},
{
"userId": 1,
"id": 3,
"title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
"body": "et iusto sed quo iure\nvoluptatem occaecati omnis eligendi aut 
ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius 
odio et labore et velit aut"
}
] 

等等……

所以我所做的是从每个对象中获取标题数组。

这是我的代码:

<?php
$url = "https://jsonplaceholder.typicode.com/posts" ;
//  Initiate curl
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($ch) ;
curl_close($ch) ;

$data = json_decode($result);

foreach ($data as $datavalue) {
echo $datavalue->title;
echo "<br/>" ;
}

现在我想要的是显示一个特定对象的标题,说 where user id =2 。

我该如何说服。 请帮助我的查询。非常感谢任何帮助。

【问题讨论】:

  • 使用 $data = json_decode($result, true); 将 json 字符串 $result 转换为可以在 foreach 循环中迭代的关联数组。
  • 我觉得我的问题不清楚。我已经获取了名称标题的数组值。我想获取特定 userId @lovelace 的单个标题

标签: php json curl


【解决方案1】:

您可以在循环中添加一个条件来检查您想要的行,当找到时,您可以将其存储在这样的变量中:

<?php


  $data = json_decode($result);

  $data = json_decode($result);

  $userId = 1;

  $result = null;

  foreach ($data as $datavalue) {
    echo $datavalue->title;
    if ($datavalue->userId == $userId) {
       $result = $datavalue;
       break;
    }
    echo "<br/>" ;
  }

var_dump($result); // if you want to display the title you can simply do $result->title but remember to check if $result is not null

【讨论】:

    【解决方案2】:

    您可以使用以下内容:

    $id = 2;
    getTitle($data, $id);
    
    function getTitle($data = null, $id = null)
    {
        foreach ($data as $datavalue) {
            if ($datavalue->id == $id) {
                echo $datavalue->title;
                echo "<br/>";
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 php array_filter() 函数。

      //Your test data
      $data = "[{\"userId\": 2,\"id\": 1,\"title\": \"sunt aut facere repellat provident occaecati excepturi optio reprehenderit\",\"body\": \"quia et suscipitsuscipit recusandae consequuntur expedita et cumreprehenderit molestiae ut ut quas totamnostrum rerum est autem sunt rem eveniet architecto\"},{\"userId\": 1,\"id\": 2,\"title\": \"qui est esse\",\"body\": \"est rerum tempore vitaesequi sint nihil reprehenderit dolor beatae ea dolores nequefugiat blanditiis voluptate porro vel nihil molestiae ut reiciendisqui aperiam non debitis possimus qui neque nisi nulla\"},{\"userId\": 1,\"id\": 3,\"title\": \"ea molestias quasi exercitationem repellat qui ipsa sit aut\",\"body\": \"et iusto sed quo iurevoluptatem occaecati omnis eligendi aut advoluptatemdoloribus vel accusantium quis pariaturmolestiae porro eius odio et labore et velit aut\"}]";
      
      //Decode the data to a PHP array rather than object
      $data = json_decode( $data, true );
      
      const searchKey  = "userId";
      const searchTerm = 2;
      
      //Filter that array
      $data = array_filter( $data, function( $value ){
          //If the value in the searched key matches the value, return true
          if( $value[ searchKey ] === searchTerm ){
              return true;
          } else {
              return false;
          }
      });
      

      您会看到我使用了两个 const 变量,searchKeysearchTerm,您可以将它们更改为您希望在 PHP array_filter() 函数中搜索的值。

      这里有一些关于 php array_filter() 函数的文档,您可能会觉得有用

      https://www.php.net/manual/en/function.array-filter.php

      【讨论】:

        猜你喜欢
        • 2012-10-21
        • 2020-09-12
        • 1970-01-01
        • 2022-06-14
        • 2021-01-25
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 2020-06-25
        相关资源
        最近更新 更多