Поиск в JSON и последующий перебор

131
14 декабря 2020, 12:10

Имеется данная JSON строка:

{"header":{"user_id":"27355","account_type":"1"},"results":[{"header":{"similarity":"96.45","index_id":5,"index_name":"Index #5"},"data":{"title":"\u30a8\u30f3\u5b50\u3061\u3083\u3093","id":74692665,"member_name":"\u2739\u3046\u306b\u30e2\u30f3\u2739","member_id":2173572}},{"header":{"similarity":"94.4","index_id":30,"index_name":"Index #9"},"data":{"id":3505976,"gel_id":4732753,"creator":"katuo1129","material":"original","characters":"","source":""}}]}

Так же имеется подобие скрипта:

$sau_global = json_decode(file_get_contents(__DIR__."/json.json"));
$text = $sau_global->results[0]->header->index_name;
switch(preg_match('#\#(.*?)\:#', $text, $match)){
    case "{$match[1]}" == "25":
        echo "Gel";
        break;
    case "{$match[1]}" == "9":
        echo "Dan";
        break;
    case "{$match[1]}" == "5":
        echo "Pi";
        break;
}

Мне нужно что бы проверялся JSON-файл и если находит в index_name, например Index #5 он выдавал результат "Pi". Но если там есть несколько index_name (с разными индексами соответственно) то он бы выдавал бы не только "Pi" но и "Gel" с "Dan".

PS. Попытка №2

$sau_global = json_decode(file_get_contents(__DIR__."/json.json"));
$x = 0;
while($x <= 2){
while($result = $sau_global->results){
    switch(preg_match('#\#(.*?)\:#', $result[$x]->header->index_name, $match)){
    case $match[1] == "5":
        echo "Pixiv<br><br>";
        break;
    case $match[1] == "9":
        echo "Danbooru<br><br>";
        break;
    case $match[1] == "25":
        echo "Gelbooru<br><br>";
        break;
}
    $x++;
    break;
}}

Вроде все работает, но он выдает так:

Pixiv

Danbooru

Pixiv

Как подправить его так что бы он не выдавал третий вариант (Pixiv) если его нет в JSON?

Answer 1
// Заранее определяем индексы
// и значения для вывода.
$indexes = [
    'Index #5' => 'Pi',
    'Index #9' => 'Dan',
    'Index #25' => 'Gel',
];
// Получаем содержимое файла.
$jsonString = file_get_contents('json.json');
// Декодируем json строку.
$sau_global = json_decode($jsonString);
// Перебираем результаты `results`.
foreach ($sau_global->results as $key => $result) {
  // Если существует поле `index_name`
  // и оно не пустое.
  if (!empty($result->header->index_name)) {
    // Выводим его значение.
    echo $indexes[$result->header->index_name], '<br><br>';
    // Пред выводом можно было бы
    // добавить различные проверки.
  }
}
READ ALSO
Удалить все заданные слова из массива данных

Удалить все заданные слова из массива данных

Есть одномерный массив $arr, каждый элемент которого содержит текстЭтот текст может включать, а может не включать имена (Маша, Саша, Дима, Катя,...

124
Атрибуты поиска или фильтра

Атрибуты поиска или фильтра

В авито или в каких-то магазинах есть фильтры поиска или фильтры заказа товаранапример в Авито если выбрать Транспорт выводятся колонки...

106
Как организовать Random без повторений на Java?

Как организовать Random без повторений на Java?

Есть числа с 0 по 23Как сделать так, что бы при нажатии на кнопку генерировалось случайное число, которое не встречалось еще как минимум 2 раза?

133