2010-06-26 3 views
3

Я хотел бы извлечь группы данных из массивов PHP в зависимости от «RouterName». Итак, в конце концов, я получу 4 больших массива (ArrDeviceA, ArrDeviceB и т. Д.)Извлечение из массива Php с использованием условий

Я не хочу использовать foreach и петлю каждые строки и помещать их в отдельный массив. Более того, возможно, что некоторые массивы могут содержать более трех строк. Количество строк не является постоянным.

Есть ли какая-либо функция для запроса массива в PHP?
alt text http://img208.imageshack.us/img208/7616/18077470.jpg

Исходные данные массива PHP являются следующие:

Array 
(
    [0] => Array 
     (
      [RouterName] => DeviceA 
      [Reference] => R2a 
      [AverageRSSI] => -36.00 
      [AverageQuality] => 63.00 
      [Date_Time] => 12-June-2010 
     ) 

    [1] => Array 
     (
      [RouterName] => DeviceA 
      [Reference] => R2a 
      [AverageRSSI] => -51.03 
      [AverageQuality] => 47.97 
      [Date_Time] => 11-June-2010 
     ) 

    [2] => Array 
     (
      [RouterName] => DeviceA 
      [Reference] => R2a 
      [AverageRSSI] => -53.63 
      [AverageQuality] => 45.37 
      [Date_Time] => 10-June-2010 
     ) 

    [3] => Array 
     (
      [RouterName] => DeviceB 
      [Reference] => R2 
      [AverageRSSI] => -38.19 
      [AverageQuality] => 60.81 
      [Date_Time] => 12-June-2010 
     ) 

    [4] => Array 
     (
      [RouterName] => DeviceB 
      [Reference] => R2 
      [AverageRSSI] => -38.64 
      [AverageQuality] => 60.36 
      [Date_Time] => 11-June-2010 
     ) 

    [5] => Array 
     (
      [RouterName] => DeviceB 
      [Reference] => R2 
      [AverageRSSI] => -38.67 
      [AverageQuality] => 60.33 
      [Date_Time] => 10-June-2010 
     ) 

    [6] => Array 
     (
      [RouterName] => DeviceC 
      [Reference] => SCN1010 
      [AverageRSSI] => -69.12 
      [AverageQuality] => 29.88 
      [Date_Time] => 12-June-2010 
     ) 

    [7] => Array 
     (
      [RouterName] => DeviceC 
      [Reference] => SCN1010 
      [AverageRSSI] => -70.99 
      [AverageQuality] => 28.01 
      [Date_Time] => 11-June-2010 
     ) 

    [8] => Array 
     (
      [RouterName] => DeviceC 
      [Reference] => SCN1010 
      [AverageRSSI] => -71.52 
      [AverageQuality] => 27.48 
      [Date_Time] => 10-June-2010 
     ) 

    [9] => Array 
     (
      [RouterName] => DeviceD 
      [Reference] => SCN1020 
      [AverageRSSI] => -62.48 
      [AverageQuality] => 36.52 
      [Date_Time] => 12-June-2010 
     ) 

    [10] => Array 
     (
      [RouterName] => DeviceD 
      [Reference] => SCN1020 
      [AverageRSSI] => -34.60 
      [AverageQuality] => 64.40 
      [Date_Time] => 11-June-2010 
     ) 

    [11] => Array 
     (
      [RouterName] => DeviceD 
      [Reference] => SCN1020 
      [AverageRSSI] => 0.00 
      [AverageQuality] => 99.00 
      [Date_Time] => 10-June-2010 
     ) 

) 

ответ

3

Я не хочу использовать foreach и зацикливать все строки и помещать их в отдельный массив.

Почему? Это 4 строки кристально чистого кода, и вы даже можете сохранить линию ... Оставайтесь простой.

$indexedByRouterName = array(); 
foreach ($array as $key => $value) { 
    $routerName = $value['RouterName']; 
    $indexedByRouterName[$routerName][] = $value; 
} 

Наличие неизвестного количества строк не является проблемой, если вы используете оператор [].

2

Is there any function to query the array in PHP?

В PHP вы можете использовать функцию in_array() (http://www.php.net/manual/en/function.in-array.php), чтобы проверить, если некоторые ключ существует, и array_search() (http://www.php.net/manual/en/function.array-search.php), что делает почти то же самое значение in_array(), но возвращает значение индекса массива вместо булевского значения.

Они не будут запрашивать в mysql_query() функции, но вы можете сделать что-то вроде этого:

function array_query($array,$what){ 
    if(in_array($what, $array)){ 
     return $array[array_search($what, $array)]; 
    } 
    return false; 
} 

Я надеюсь, что эта работа для вас

EDIT: Я нашел array_search() как для многомерных массивов (ваш пример), код выше, вы только торговать на моей функции функции array_search($what, $array) с recursiveArraySearch($array,$what) функции:

function recursiveArraySearch($haystack, $needle, $index = null) 
{ 
    $aIt  = new RecursiveArrayIterator($haystack); 
    $it = new RecursiveIteratorIterator($aIt); 

    while($it->valid()) 
    {  
     if (((isset($index) AND ($it->key() == $index)) OR (!isset($index))) AND ($it->current() == $needle)) { 
      return $aIt->key(); 
     } 

     $it->next(); 
    } 

    return false; 
} 
1

Существует библиотека SQL4Array от absynthe, которая позволяет выполнять SQL-запросы против массива PHP. Я не верю, что он еще поддерживает предложения GROUP BY, но может предоставить альтернативу другим методам поиска массивов

Смежные вопросы