2015-02-22 3 views
0

я хочу получить доступ к данным внутри этого массива, чтобы сделать сравнение на нем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 
) 

к массивам «комната» в первый массив

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

// 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

Рекурсия - это ответ –

+0

Это может быть лучший вопрос, который вы можете задать на [Code Review SE] (http://codereview.stackexchange.com/). – andrewgu

+0

Может быть, array_diff помогает ... вы посмотрели? – pecci

ответ

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; 
     }       
    } 
} 

Матчи будут содержать все значения в $ датчиков, которые также в $ sensorsInHit.

+0

Это отличная помощь благодаря – ThriceGood