многомерный массив — PHP: лучший способ, чем эти вложенные циклы?

я хочу получить доступ к данным внутри этого массива, чтобы сделать сравнение на нем

$roomSensors =

Array
(
[maple] => Array
(
[room1] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[room2] => Array
(
[0] => 4
[1] => 5
[2] => 6
)

)
)

Я хочу сравнить массив чисел, как это:

$sensorsInHit =

Array
(
[0] => 3
[1] => 1
[2] => 2
)

к массивам ‘room’ в первом массиве

Вот цикл, который я использовал, чтобы сделать это, это работает, но я думаю, что это некрасиво и многословно.

// each 'ward' has an array of 'rooms'

foreach ($roomSensors as $ward => $rooms) {

// looping through each room in the rooms array
// the values are arrays of bluetooth sensor ids

foreach ($rooms as $room => $sensors){

// at this point i would like to just compare
// the sensorsInHit array to the $sensors array
// but i couldnt find a function that allows
// to see if one of the values in one array
// is equal to one of the values in another array
// so i just loop through the array and compare
// and compare single values to the array

foreach ($sensorsInHit as $sensor){

if (in_array($sensor, $sensors)){

// do loads of stuff

break;
}
}
break;
}
}

раскомментирована

foreach ($roomSensors as $ward => $rooms) {

foreach ($rooms as $room => $sensors){

foreach ($sensorsInHit as $sensor){

if (in_array($sensor, $sensors)){

// do loads of stuff

break;
}
}
break;
}
}

я знаю, что они не массивные массивы значений и не занимают много времени, но я хотел бы знать, есть ли более чистый способ сделать это?

спасибо за любую помощь!

0

Решение

Вы можете использовать функцию PHP array_intersect:

foreach ($roomSensors as $ward => $rooms) {
foreach ($rooms as $room => $sensors){
$matches = array_intersect($sensors, $sensorsInHit);
if (count($matches) > 0){
// do loads of stuff
break;
}
}
}

Совпадения будут содержать все значения в $ sensor, которые также находятся в $ sensorInHit.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]