Как выполнить фильтрацию на основе строки?

  • 24 августа 2023 г. 15:16
Ответы на вопрос 2
Вы можете выполнить фильтрацию на основе строки, используя функцию array_filter() в сочетании с функцией in_array(). 

Ваш код может выглядеть следующим образом:

```php
$permissions = [
   "group.phantom",
   "group.god",
   "group.imperator",
   "group.general",
   "group.hermit",
   "group.soldier"
];

$inputData = [
   [
      "permission" => "group.default" 
   ],
   [
      "permission" => "group.phantom" 
   ],
   [
      "permission" => "group.general" 
   ]
];

// Функция для проверки наличия значения в массиве permissions
$filterFunction = function ($value) use ($permissions) {
    return in_array($value["permission"], $permissions);
};

// Фильтрация входных данных
$filteredData = array_filter($inputData, $filterFunction);

// Получение старшего значения permission
$highestPermission = array_reduce($filteredData, function ($carry, $item) {
    return ($carry == null || strcmp($item["permission"], $carry) < 0) ? $item["permission"] : $carry;
}, null);

echo $highestPermission; // group.god
```

В этом примере функция array_filter() используется для фильтрации входных данных, оставляя только те элементы, у которых значение "permission" присутствует в массиве $permissions. Затем функция array_reduce() используется для нахождения "старшего" значения "permission" из отфильтрованных данных.
1. Проверяем наличие приоритетов и разрешений.
2. Находим индекс приоритета 'group.default' и сохраняем его.
3. Инициализируем верхний приоритет с индексом 'group.default'.
4. Проверяем каждое разрешение в списке.
5. Если разрешение найдено в приоритетах и его индекс меньше текущего верхнего приоритета, обновляем верхний приоритет.
6. Если текущий верхний приоритет остался 'group.default', сохраняем его.
7. В противном случае, сохраняем приоритет с соответствующим индексом из списка приоритетов.
Похожие вопросы