PHP CURL Как отфильтровать результаты JSON? - PullRequest
1 голос
/ 21 марта 2019

нужно отфильтровать мои запросы jl curl.Моя проблема в том, что мой список вывода всегда является полным списком JSON (ссылка 1-3).Мне нужно запросить только ссылку 1 и ссылку 3.

Пожалуйста, проверьте мой пример фильтра

$responseData = apiRequest("link/list", array('id' => json_encode(array('1001', '1003'))));

Этот фильтр не работает для меня.Как я могу решить мою проблему?Я рад за каждый совет

Большое спасибо

Запрос API:

function apiRequest($command, $requestData = array()) {
            $apiKey = "";
                $headers = array(
     'Authorization: APIKEY '.$apiKey
);
            if (!is_array($requestData)) {
                $requestData=array();
            }
            $requestData['apiKey'] = $apiKey;
            $curl = curl_init();
            curl_setopt_array($curl, array(
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_HTTPHEADER => $headers,
                CURLOPT_URL => 'https://api.example.com/'.$command,        
                CURLOPT_POST => 1,
                CURLOPT_POSTFIELDS => $requestData)
                );

            if (($responseData = curl_exec($curl))===false) {
                curl_close($curl);
                /* echo "cURL error: ".curl_error($curl); */
                return null;
            }

            return json_decode($responseData, true);
        }

        $responseData = apiRequest("link/list", array('id' => json_encode(array('1001', '1003'))));

Список Json:

 {
    "count": 3,
    "links": [
        {
            "id": 1001,
            "name": "Link 1",
            "title": "Link Title",
            "head": "Links",
            "pic": "https://image.com/pic.jpg",
            "views": "10,000+",
            "country": "US"
        }

          {
            "id": 1002,
            "name": "Link 2",
            "title": "Link Title 2",
            "head": "Links",
            "pic": "https://image.com/pic.jpg",
            "views": "10,000+",
            "country": "US"
        }

       {
            "id": 1003,
            "name": "Link 3",
            "title": "Link Title 3",
            "head": "Links",
            "pic": "https://image.com/pic.jpg",
            "views": "10,000+",
            "country": "US"
        }
    ]
}

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Лучше отфильтровать результат, получая его от конца API , но если невозможно отфильтровать результат по API, попробуйте этот способ с php array_filter(),

<?php
$api_response = '{"count":3,"links":[{"id":1001,"name":"Link 1","title":"Link Title","head":"Links","pic":"https://image.com/pic.jpg","views":"10,000+","country":"US"},{"id":1002,"name":"Link 2","title":"Link Title 2","head":"Links","pic":"https://image.com/pic.jpg","views":"10,000+","country":"US"},{"id":1003,"name":"Link 3","title":"Link Title 3","head":"Links","pic":"https://image.com/pic.jpg","views":"10,000+","country":"US"}]}';

$filter = [1001,1003];
$links = json_decode($api_response)->links;
$filtered = array_filter($links, function ($item) use ($filter) {
    return in_array($item->id, $filter);
});

print_r($filtered);
?>

DEMO: https://3v4l.org/BNotG

0 голосов
/ 21 марта 2019

Похоже, вы пытаетесь сделать это в API: / это даже предлагает эту функциональность?если это так, спросите их, укажите или дайте нам реальную ссылку на сайт, чтобы мы могли проверить документы ..

, хотя если нет, то я подозреваю, тогда просто используйте фильтр массива в результате.

...