PHP многомерный массив поиска комбинаций значений в массиве

У меня есть многомерный массив:

$array =
Array (
[0] => Array ( [id] => 2 [zoneId] => 2 [buildingId] => 2 [typeId] => 2 )
[1] => Array ( [id] => 4 [zoneId] => 2 [buildingId] => 2 [typeId] => 1 )
[2] => Array ( [id] => 6 [zoneId] => 6 [buildingId] => 17 [typeId] => 2 ) )

И я хотел бы искать, если комбинация, например, [buildingId] => 2, [typeId] => 2 существует, является массивом 0, 1 или 2.

Я попробовал следующее:

$keyType = array_search(2, array_column($array, 'typeId'));
$keyBuilding = array_search(2, array_column($array, 'buildingId'));

if(is_numeric($keyType)&&is_numeric($keyBuilding)){
echo 'Combination does exists'
}

Это работает, но дает также ложный положительный результат, если я буду искать [buildingId] => 17, [typeId] => 1. Как я могу решить эту проблему?

редактировать

Я также хотел бы знать, если комбинация не находится в массиве, как я могу это организовать?

if($result == false){
echo 'does not exists';
}

0

Решение

$buildingId = 2;
$typeId = 2;
$result = false;
foreach ($array as $key => $val) {
if ($val['buildingId'] == $buildingId && $val['typeId'] == $typeId) {
$result = $key; // If you want the key in the array
$result = $val; // If you want directly the entry you're looking for
break; // So that you don't iterate through the whole array while you already have your reuslt
}
}
0

Другие решения

Вы можете попробовать этот код:

$keyTypeExistsAndHaveSameValue = isset($array['typeId']) && $array['typeId'] === 2;
$keyBuildingExistsAndHaveSameValue = isset($array['buildingId']) && $array['buildingId'] === 2;

if($keyTypeExistsAndHaveSameValue && $keyBuildingExistsAndHaveSameValue){
echo 'Combination does exists'
}

Этот код проверяет, если typeId & Ключи buildingId существуют, но он также проверяет, являются ли его значения 2 и 2.

1

Я думаю, что вам нужно это

$keyType = array_search(1, array_column($array, 'typeId'));
$keyBuilding = array_search(17, array_column($array, 'buildingId'));

if(is_numeric($keyType)||is_numeric($keyBuilding)){
echo 'Combination does exists';
}

Теперь здесь вам нужен или оператор вместо и оператор, потому что вы хотите, чтобы typeid = 1 существовал или билд id = 17 существовал.

Если я правильно понял ваш вопрос, то вы пытаетесь сделать что-то подобное, верно?

Надеюсь это поможет!

0

Вам нужно было бы выполнить цикл foreach, чтобы получить фактический номер массива, другое решение, кажется, не отвечает тому, что вы ищете, а именно получить индексный номер.

Я хотел бы найти, если комбинация, например, [buildingId] => 2, [typeId] => 2 существует, является массивом 0, 1 или 2.

РЕДАКТИРОВАТЬ: Этот код является просто примером кода, чтобы показать, как вы получите номер индекса массива, в производственной среде вы бы сохранили соответствующие массивы, цифры сравнения не были жестко запрограммированы, и т. Д …

$array = array(array('id' => 2, 'zoneId' => 2, 'buildingId' => 2, 'typeId' => 2),
array('id' => 4, 'zoneId' => 2, 'buildingId' => 2, 'typeId' => 2),
array('id' => 6, 'zoneId' => 6, 'buildingId' => 17, 'typeId' => 2));foreach ($array as $building => $building_details)
{
if ($building_details['buildingId'] === 2 && $building_details['typeId'] === 2)
{
echo 'Array number ' . $building . ' matches criteria<br>';
}
}

Выход:

Array number 0 matches criteria
Array number 1 matches criteria

Вы можете просмотреть этот фрагмент онлайн Вот.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector