2013-03-05 2 views
0

Привет, У меня есть проблема, и я не могу найти ответ. Я имею массив с массивами в нем и хочу сгруппировать эти вспомогательные массивы в группы на основе того же значения для поля. Это мой код и позволяет сортировать мои массивы на основе массивов внутри значений. Как сгруппировать результат на основе общих значений? Я, вероятно, не будет знать все значения, как некоторые из них основаны на дате, и я хочу, например, группы всего за день/месяцPHP группировки массивов в массиве по значению

if($filter == "ORDER BY TODO_REF DESC"){ 
$type_sort = 0; 
}; 
if($filter == "ORDER BY TODO_PRIO DESC"){ 
$type_sort = 2; 
}; 
if($filter == "ORDER BY TODO_DEAD DESC"){ 
$type_sort = 3; 
}; 

function aasort (&$array, $key) { 
$sorter=array(); 
$ret=array(); 
reset($array); 
foreach ($array as $ii => $va) { 
    $sorter[$ii]=$va[$key]; 
} 
asort($sorter); 
foreach ($sorter as $ii => $va) { 
    $ret[$ii]=$array[$ii]; 
} 
$array=$ret; 
} 

aasort($test_array, $type_sort); 
print_r($test_array); 

Токовый выход:

priority 
Array 
(

[3] => Array 
    (
     [0] => 2 
     [1] => sdfsdgdfgdfgdfg 
     [2] => 3 
     [3] => 2013-05-30 13:53:23 
    ) 

[2] => Array 
    (
     [0] => 1 
     [1] => This must also be done 
     [2] => 4 
     [3] => 2013-03-28 12:13:34 
    ) 

[1] => Array 
    (
     [0] => 1 
     [1] => testing this show me 2 
     [2] => 5 
     [3] => 2029-02-23 17:27:20 
    ) 

[0] => Array 
    (
     [0] => 1 
     [1] => Do this task and make sure it gets done 
     [2] => 5 
     [3] => 2013-06-28 12:12:41 
    ) 

) 

То, что я хочу что-то будет как это, где они разделяются на отдельные массивы на основе суб ключа массива 2:

Array 
(
[3] => Array 
    (
     [0] => 2 
     [1] => sdfsdgdfgdfgdfg 
     [2] => 3 
     [3] => 2013-05-30 13:53:23 
    ) 

) 
Array 
(
[2] => Array 
    (
     [0] => 1 
     [1] => This must also be done 
     [2] => 4 
     [3] => 2013-03-28 12:13:34 
    ) 

) 
Array 
(
[1] => Array 
    (
     [0] => 1 
     [1] => testing this show me 2 
     [2] => 5 
     [3] => 2029-02-23 17:27:20 
    ) 

[0] => Array 
    (
     [0] => 1 
     [1] => Do this task and make sure it gets done 
     [2] => 5 
     [3] => 2013-06-28 12:12:41 
    ) 

) 

ответ

0
$array_1 = array(); 
$array_2 = array(); 
foreach($test_array as $item) { 
    if($item[0] == 1) { 
    $array_1[] = $item; 
    } elseif($item[0] == 2) { 
    $array_2[] = $item; 
    } 
} 
$final_array = array($array_1, $array_2); 

Там должно быть больше оптимизируют d, но это должно отвечать вашим потребностям.

+0

Так что я понимаю, что это будет сделано, это сделать 2 массива. Когда я печатаю_r $ test_array [0]; Я получаю массив, но почему этот массив равен 1? Также, что это делает, это разместить его в двух массивах, но, похоже, это не делает это по значению вспомогательных массивов? Также, когда я использую даты, он должен динамически добавлять больше массивов, так как будет много других значений для группировки. –

+0

, тогда вы должны использовать автоматически сгенерированный '$ array [$ i]' вместо '$ array_1' и' $ array_2' – Raptor

0

array_multisort() является то, что вы после того, как это позволит вам сортировать первичный массив по югу массива и сохранить ссылку значения ключа

Я использую ниже для сортировки довольно здоровенный многомерного массива на основе от стрелки порядка сортировки asc/desc в таблице со многими столбцами и сортируемыми столбцами. Его abit беспорядок, но вы должны быть в состоянии следовать за ним.

if (strlen($_GET['col'])<1) { 
       foreach ($dataarray as $key => $row) { 
        $spend[$key] = $row[6]; 
       } 
       array_multisort($spend, SORT_DESC, $dataarray); 
      } else if ($_GET['col']=="spend"){ 
       foreach ($dataarray as $key => $row) { 
        $spend[$key] = $row[3]; 
       } 
       if ($_GET['order']=="asc") { 
        array_multisort($spend, SORT_ASC, $dataarray); 
       } else { 
        array_multisort($spend, SORT_DESC, $dataarray); 
       } 
      } else if ($_GET['col']=="name"){ 
       foreach ($dataarray as $key => $row) { 
        $name[$key] = $row[1]; 
       } 
       if ($_GET['order']=="asc") { 
        array_multisort($name, SORT_ASC, $dataarray); 
       } else { 
        array_multisort($name, SORT_DESC, $dataarray); 
       } 
      } else if ($_GET['col']=="avg"){ 
       foreach ($dataarray as $key => $row) { 
        $avg[$key] = $row[4]; 
       } 
       if ($_GET['order']=="asc") { 
        array_multisort($avg, SORT_ASC, $dataarray); 
       } else { 
        array_multisort($avg, SORT_DESC, $dataarray); 
       } 
      } else if ($_GET['col']=="sites"){ 
       foreach ($dataarray as $key => $row) { 
        $sites[$key] = $row[5]; 
       } 
       if ($_GET['order']=="asc") { 
        array_multisort($sites, SORT_ASC, $dataarray); 
       } else { 
        array_multisort($sites, SORT_DESC, $dataarray); 
       } 
      } else if ($_GET['col']=="rate"){ 
       foreach ($dataarray as $key => $row) { 
        $rate[$key] = $row[6]; 
       } 
       if ($_GET['order']=="asc") { 
        array_multisort($rate, SORT_ASC, $dataarray); 
       } else { 
        array_multisort($rate, SORT_DESC, $dataarray); 
       } 
      } else { 
       foreach ($dataarray as $key => $row) { 
        $spend[$key] = $row[2]; 
       } 
       array_multisort($spend, SORT_DESC, $dataarray); 
      } 
Смежные вопросы