#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()
, которая может оказаться полезной