Укоротить/упростить функцию PHP

Функция check принимает 2 массива:

  1. Товары с количеством на складе
  2. Выбранные склады

Результатом ее выполнения должно быть:
true, если все товары присутствуют хоть в одном из выбранных складов.
false, если хоть один товар из массива не находиться не в одном из выбранных складов

Живой пример

Уверен что можно проще как то это все сопоставить, но кроме как переборами я не придумал, какие есть альтернативы?

check($params, array $restrictionParams,)
{

    $goodStore = null;

    foreach ($params['ITEMS_STORE'] as $itemId => $stores) {
        foreach ($stores as $arStore) {
            if ($arStore['PRODUCT_AMOUNT'] > 0) {
                $goodStore[$arStore['ELEMENT_ID']][$arStore['ID']] = true;
            }
        }
    }

    $check = null;

    foreach ($restrictionParams['AVAIL_STORE'] as $needId) {
        foreach ($goodStore as $itemId => $arStore) {
            if(array_key_exists($needId, $arStore)) {
                $check[$itemId][$needId] = true;
            }else{
                $check[$itemId][$needId] = false;
            }
        }
    }

    foreach ($check as $itemId => $Store) {
        if(in_array(true, $Store)) {
            $check[$itemId] = true;
        }else{
            $check[$itemId] = false;
        }
    }

    if (in_array(false,$check)) {
        return false;
    }else{
        return true;
    }
}

Ответы (1 шт):

Автор решения: Sanya H

Что-то мне кажется, что Ваш код не соответствует описанию. Но возможно я описание не правильно понял. А Ваш код (функцию) можно сократить до такого вида:

function check($params, array $restrictionParams)
{
    foreach ($params['ITEMS_STORE'] as $itemId => $stores) {
        foreach ($stores as $arStore) {
            if ($arStore['PRODUCT_AMOUNT'] > 0 
                && in_array($arStore['ID'], $restrictionParams['AVAIL_STORE'])
            ) {
                //хотя бы один товар нашелся, посему можно следующий ITEMS_STORE смотреть
                continue 2;
            }
        }
        
        // в текущем ITEMS_STORE отсутствуют товары с перечня AVAIL_STORE,
        // что не удовлетворяет условию задачи, посему нету смысла дальше продолжать
        return false;
    }

    return true;
}

Ссылка на сандбокс с добавленной этой функцией (check2) для теста - http://sandbox.onlinephpfunctions.com/code/33f58a5fed9ba3e70ea440b3cf56ce30a8ca2674

→ Ссылка