Как удалить повторяющиеся значения из Json в PHP - PullRequest
1 голос
/ 07 марта 2020

Как я могу использовать PHP для удаления дубликата из JSON?

<?php
if(!function_exists("curl_init")) die("cURL extension is not installed");
$json = 'https://sug.daraz.pk/sug?area=lazada_pk_web&code=utf-8&q=book';

$ch=curl_init($json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$r=curl_exec($ch);
curl_close($ch);

$arr = json_decode($r,true);

foreach($arr['result'] as $item) {

    foreach ($item["model"] as $key => $value) {
        $pattern = '/\s+/';
        $string = $value.' ';

        $split = preg_split( $pattern, $string);
        $go = implode(', ', $split);

        echo $go;
        }
}
?>

Я получаю результат:

books, book, shelf, book, rack, bookmarks, books, for, kids, book, holder, book, shelve, book, stand, book, end, book, reader, 

Я хочу, чтобы результат был в тексте как это:

books, book, shelf, rack, bookmarks, for, kids, holder, shelve, stand, end, reader, 

Ответы [ 3 ]

2 голосов
/ 07 марта 2020

Я использую array_unique и array_merge

if(!function_exists("curl_init")) die("cURL extension is not installed");
$json = 'https://sug.daraz.pk/sug?area=lazada_pk_web&code=utf-8&q=book';

$ch=curl_init($json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$r=curl_exec($ch);
curl_close($ch);

$arr = json_decode($r,true);
$result = array();

foreach($arr['result'] as $item) {

    foreach ($item["model"] as $key => $value) {
        $pattern = '/\s+/';
        $string = $value.' ';

        $split = preg_split( $pattern, $string);
        $result = array_merge($result, $split);
    }
}
$result = array_values(array_filter(array_unique($result), function($value) { return !is_null($value) && $value !== ''; }));
print implode(', ', $result);

, как и ожидалось:

books, book, shelf, rack, bookmarks, for, kids, holder, shelve, stand, end, reader
1 голос
/ 07 марта 2020

Это довольно стандартная функция уменьшения. Обратите внимание на массив, переданный в самом конце, и что я взрываю условия поиска.

$data = json_decode('{"result":[{"type":"nt-common","model":{"query":"books"}},{"type":"nt-common","model":{"query":"book shelf"}},{"type":"nt-common","model":{"query":"book rack"}},{"type":"nt-common","model":{"query":"bookmarks"}},{"type":"nt-common","model":{"query":"books for kids"}},{"type":"nt-common","model":{"query":"book holder"}},{"type":"nt-common","model":{"query":"book shelve"}},{"type":"nt-common","model":{"query":"book stand"}},{"type":"nt-common","model":{"query":"book end"}},{"type":"nt-common","model":{"query":"book reader"}}]}');

$queries = array_reduce($data->result, static function($found, $result) {
    $items = explode(' ', $result->model->query);

    foreach($items as $item) {
        if (!in_array($item, $found)) {
            $found[] = $item;
        }
    }

    return $found;
}, []);

sort($queries);

Дает:

book bookmarks books end for holder kids rack reader shelf shelve stand

https://3v4l.org/Xeaek

Собираем это вместе:

$fetch = static function(string $uri) {
    function_exists('curl_init') || die('cURL extension is not installed.');

    $handle = curl_init($uri);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    $data = json_decode(curl_exec($handle));
    curl_close($handle);

    return $data;
};

$modelQueries = static function($found, $result) {
    $items = explode(' ', $result->model->query);

    foreach($items as $item) {
        if (!in_array($item, $found)) {
            $found[] = $item;
        }
    }

    return $found;
};

$bookModels = 'https://sug.daraz.pk/sug?area=lazada_pk_web&code=utf-8&q=book';

$books = $fetch($bookModels);

$bookQueries = array_reduce($books->result, $modelQueries, []);

sort($bookQueries);
1 голос
/ 07 марта 2020

Лучшая практика для ваших нужд - создать новые Array и pu sh ваши ключи в нем, используя условие, чтобы проверить, не находятся ли они уже в массиве, с помощью функции in_array.

Например:

<?php
if(!function_exists("curl_init")) die("cURL extension is not installed");
$json = 'https://sug.daraz.pk/sug?area=lazada_pk_web&code=utf-8&q=book';

$ch=curl_init($json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$r=curl_exec($ch);
curl_close($ch);

$arr = json_decode($r, true);
$data = array();

foreach($arr['result'] as $item) {
    foreach ($item["model"] as $key => $value) {
        $pattern = '/\s+/';
        $string = $value.' ';

        $split = preg_split( $pattern, $string);
        $go = implode(', ', $split);

        if (!in_array($go, $data)) {
            array_push($data, $go);
        }
    }
}

echo implode(',', $data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...