Всем привет. необходимо вывести отсортированные и объединенные данные нескольких массивов. не знаю как. Суть. от АПИ я получаю от одного до десяти ответов в виде json массивов. Пример массива:
{
"results": [
{
"position": "1",
"url": "https:\/\/www.pizzahut.com\/",
"title": null,
"snippet": "<span>Order pizza online for fast pizza delivery or drop by for carryout. You may also
\ncontact Pizza Hut and find out about our catering services for your next big event.<\/span>"
},
{
"position": "2",
"url": "https:\/\/www.dominos.com\/",
"title": null,
"snippet": "<span>Domino's Home Page - Domino's Pizza, Order Pizza Online for Delivery -
\nDominos.com.<\/span>"
},
...
]
}
Массивов в этом массиве 100. И (повторюсь) таких json массивов от одного до десяти. Мне необходимо получить первых десять URL из каждого такого массива и вывести эти URL в таблицу, но вывести так чтоб часто повторяющиеся URL были сверху, а внизу не повторяющиеся. как бы в порядке убывания по повторению. Подскажите, пожалуйста как можно сие реализовать.
Если все правильно понял то так:
$parsedJSONArray = []; // Здесь лежат "таких json массивов от одного до десяти"
$topURL= [];//Здесь будет
foreach($parsedJSONArray as $parsedJSON){
//если вы использовали json_decode($jsonResponse)
$result = $parsedJSON->result;
// или json_decode($jsonResponse,true)
$result = $parsedJSON['result']
foreach($result as $object){
//если вы использовали json_decode($jsonResponse)
if (isset($topURL->url)){
$topURL['url']= $topURL['url']+1;
}else{
$topURL[$object->url]=1;
}
// или json_decode($jsonResponse,true)
if (isset($topURL['url'])){
$topURL['url']= $topURL['url']+1;
}else{
$topURL[$object['url']]=1;
}
}
В итоге в переменной $topURL
, будут значения (url=>кол-во)
var_dump $topURL
=> array(2) { ["https://www.pizzahut.com/"]=> int(1) ["https://www.dominos.com/"]=> int(1) }
Ну а дальше сортируете и выводите, как душе угодно.
Допустим упрощенные исходные данные выглядят так
$jsonData = [
['results' => [
['url' => 'google.com'],
['url' => 'yandex.ru'],
['url' => 'yandex.ru'],
['url' => 'yandex.ru'],
['url' => 'yandex.ru'],
]],
['results' => [
['url' => 'google.com'],
['url' => 'yandex.ru'],
['url' => 'yandex.ru'],
['url' => 'bing.com'],
['url' => 'rambler.ru'],
]],
];
Берем первые $topN
значений из массивов
$topN = 4;
$top = array_map(function($v) use ($topN){.
return array_slice($v['results'], 0, $topN);
}, $jsonData);
сливаем их в один и извлекаем url
$data = array_column(array_merge(...$top), 'url');
Подсчитываем значения и сортируем в порядке убывания частоты.
$data = array_count_values($data);
arsort($data)
на выходе имеем
[yandex.ru] => 5
[google.com] => 2
[bing.com] => 1
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго дня! Есть устройство с которого нужно считывать строку в ACSII протокол общения TCP/IPЕсть рабочий код:
Необходимо написать программу, которая бы читала лог-файлы ВидовсПроблема в том, что мы этого ещё не учили, а курсовую делать нужно