JSON: выборка определенной строки из массива с помощью php

#php #json #curl

#php #json #curl

Вопрос:

Привет, я пытаюсь извлечь определенные данные из имеющегося у меня формата JSON. Я использую предварительно созданный json для своей практики.

Формат JSON выглядит следующим образом :

 [
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio 
 reprehenderit",
"body": "quia et suscipitnsuscipit recusandae consequuntur expedita et 
cumnreprehenderit molestiae ut ut quas totamnnostrum rerum est autem sunt   
rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitaensequi sint nihil reprehenderit dolor 
beatae ea dolores nequenfugiat blanditiis voluptate porro vel nihil 
molestiae 
ut reiciendisnqui 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 iurenvoluptatem occaecati omnis eligendi aut 
adnvoluptatem doloribus vel accusantium quis pariaturnmolestiae porro eius 
odio et labore et velit aut"
}
] 
 

и так далее…

Итак, что я сделал, я извлек массив title из каждого объекта.

Вот мой код :

 <?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/>" ;
}
 

Теперь я хочу показать заголовок определенного объекта, скажем, где идентификатор пользователя = 2 .

Как я могу это сделать. Пожалуйста, помогите с моим запросом. Любая помощь действительно приветствуется.

Комментарии:

1. используется $data = json_decode($result, true); для превращения строки json $result в ассоциативный массив, который вы можете использовать в своем цикле foreach.

2. Я думаю, что мой вопрос неясен. Я уже извлек значения массива name title. Я хочу получить единственный заголовок конкретного идентификатора пользователя @lovelace

Ответ №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 переменные, searchKey и searchTerm вы можете изменить их на значения, которые вы хотите найти в функции PHP array_filter() .

Вот некоторая документация по функции php array_filter() , которая может оказаться полезной

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