@li0ard
JS Dev

Фильтрация по строковому значению?

Приветствую. Условно есть массив с описанием значений от "старшего" к "младшему"
["group.phantom", "group.god", "group.imperator", "group.general", "group.hermit", "group.soldier"]
, а также входные данные:
[
   [
      "permission" => "group.default" 
   ], 
   [
      "permission" => "group.phantom" 
   ], 
   [
      "permission" => "group.general" 
   ] 
]


Так вот, как получить "старшее" значение permission из входных данных?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
Newto
@Newto
$a = ["group.phantom", "group.god", "group.imperator", "group.general", "group.hermit", "group.soldier"];


$b = [
   [
      "permission" => "group.default" 
   ],
   [
      "permission" => "group.phantom" 
   ], 
   [
      "permission" => "group.hermit" 
   ],
   [
      "permission" => "group.imperator"
   ],
   [
      "permission" => "group.god" 
   ],
];


function getItem($a, $b) {

	foreach ($a as $item) {
		
		foreach ($b as $data_arr => $data) {
			
			if ($item == $data['permission'])  return $item;
		}
	}
}

print getItem($a, $b);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
zetamen
@zetamen
В поисках нового
<?php
$priorities = ["group.phantom", "group.god", "group.imperator", "group.general", "group.hermit", "group.soldier"];
$permissions = [
    [
       "permission" => "group.default" 
    ], 
    [
       "permission" => "group.phantom" 
    ], 
    [
       "permission" => "group.general" 
    ] 
];

$defaultPriority = 'group.default';
$defaultPriorityIndex = count($priorities);
$topPriorityIndex = $defaultPriorityIndex;
foreach ($permissions as $permission) {
    $index = array_search($permission['permission'], $priorities);
    if ($index !== false && $index < $topPriorityIndex) {
        $topPriorityIndex = $index;
    }
}

$topPriority = ($topPriorityIndex == $defaultPriorityIndex) ? $defaultPriority : $priorities[$topPriorityIndex];
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Ну и просто для комплекта, решение с использованием функций для работы с массивами
$permission = array_values(array_intersect($a, array_column($b, 'permission')))[0] ?? null;

array_column() сделает из $b нормальный массив, без этих бессмысленных "permission"
array_intersect собственно вернет пересечение двух массивов, все значения из $a, которые есть в $b.
теперь нам нужно самое первое значение из этого массива. Один из вариантов - это array_values()[0]
если нет совпадений, то при обращении к нулевому элементу будет ошибка, для её подавления используем сокращенный оператор проверки на существование, и присваиваем значение null
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы