Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Поиск в многомерном массиве (https://javascript.ru/forum/server/86037-poisk-v-mnogomernom-massive.html)

Sonya 06.08.2024 19:31

Поиск в многомерном массиве
 
Здравствуйте! Подскажите пожалуйтса, как можно реализовать поиск наибольшего или наименьшего числа (в зависимости от "category") "quantity" в каждом блоке массива
{
    "category": {
        "A": [
            {
                "teacher": 27,
                "quantity": 32
                
            },
            {
                "teacher": 31,
                "quantity": 39
            },
            {
                "teacher": 41,
                "quantity": 22
            },
            {
                "teacher": 73,
                "quantity": 15
            }
        ],
        "B": [
            {
                "teacher": 28,
                "quantity": 33
                
            },
            {
                "teacher": 46,
                "quantity": 23
            },
            {
                "teacher": 34,
                "quantity": 22
            },
            {
                "teacher": 131,
                "quantity": 319
            }
        ],
        "C": [
            {
                "teacher": 72,
                "quantity": 139
                
            },
            {
                "teacher": 88,
                "quantity": 12
            },
            {
                "teacher": 83,
                "quantity": 56
            },
            {
                "teacher": 55,
                "quantity": 23
            }
        ],
        "D": [
            {
                "teacher": 11,
                "quantity": 78
                
            },
            {
                "teacher": 34,
                "quantity": 25
            },
            {
                "teacher": 21,
                "quantity": 35
            },
            {
                "teacher": 34,
                "quantity": 26
            }
        ],
        "E": [
            {
                "teacher": 30,
                "quantity": 10
            },
            {
                "teacher": 23,
                "quantity": 99
            },
            {
                "teacher": 67,
                "quantity": 87
            },
            {
                "teacher": 10,
                "quantity": 53
            }
        ]
    }
}
в категории "А" наибольшее число такое-то, в "B" наименьшее число такое-то, в категории "С" - наибольшее, в "D" - наименьшее, в "E" - наибольшее.
Для массива с одним блоком, я использую
foreach($values as $key => $value)
, а вот когда их несколько не получается. Помогите, пожалуйста.

Aetae 06.08.2024 20:58

Ну вложи один в другой, какие проблемы?
foreach($values as $categoryKey => $categoryValues) {
  foreach($categoryValues as $key => $value) {
    ....
  }
}

Sonya 06.08.2024 21:13

Пробовала, что-то никак, может, что упустила. Попробую ещё.

Sonya 06.08.2024 21:18

За ответ огромное спасибо!

Aetae 06.08.2024 22:29

<?php
$values = json_decode('{
  "category": {
    "A": [
      {
        "teacher": 27,
        "quantity": 32
        
      },
      {
        "teacher": 31,
        "quantity": 39
      },
      {
        "teacher": 41,
        "quantity": 22
      },
      {
        "teacher": 73,
        "quantity": 15
      }
    ],
    "B": [
      {
        "teacher": 28,
        "quantity": 33
        
      },
      {
        "teacher": 46,
        "quantity": 23
      },
      {
        "teacher": 34,
        "quantity": 22
      },
      {
        "teacher": 131,
        "quantity": 319
      }
    ],
    "C": [
      {
        "teacher": 72,
        "quantity": 139
        
      },
      {
        "teacher": 88,
        "quantity": 12
      },
      {
        "teacher": 83,
        "quantity": 56
      },
      {
        "teacher": 55,
        "quantity": 23
      }
    ],
    "D": [
      {
        "teacher": 11,
        "quantity": 78
        
      },
      {
        "teacher": 34,
        "quantity": 25
      },
      {
        "teacher": 21,
        "quantity": 35
      },
      {
        "teacher": 34,
        "quantity": 26
      }
    ],
    "E": [
      {
        "teacher": 30,
        "quantity": 10
      },
      {
        "teacher": 23,
        "quantity": 99
      },
      {
        "teacher": 67,
        "quantity": 87
      },
      {
        "teacher": 10,
        "quantity": 53
      }
    ]
  }
}', true);

$maxQuantity = [];

foreach($values['category'] as $categoryKey => $categoryValues) {
  $max = 0;
  foreach($categoryValues as $key => $value) {
    if($value['quantity'] > $max) {
      $max = $value['quantity'];
      $maxQuantity[$categoryKey] = $value;
    }
  }
}

echo "В катеогории А победил " . $maxQuantity['A']['teacher'] . " со счётом " . $maxQuantity['A']['quantity'] . ".\n";

var_dump($maxQuantity);

Sonya 06.08.2024 22:39

Огромное спасибо!

Sonya 07.08.2024 01:13

Извините за наивность, но если этот массив у меня из array_values, как можно в данном случае использовать json_decode?

Aetae 07.08.2024 02:49

Не знаю что за array_values. Так чтоли, лол?
$values = $array_values; // вместо json_decode

Или так?
$values = json_decode($array_values, true);


Если нет - показывай код.

Sonya 07.08.2024 08:21

Доброе утро. Массив находится в файле, в котором переодически меняются только числа. Поэтому, я его открываю так: $array = file('data.txt'), и дальше $values = array_values($array);

Sonya 07.08.2024 08:43

Сделала так:
$values = json_decode(file_get_contents('data.txt'), true);


Часовой пояс GMT +3, время: 10:46.