2013-03-05 41 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陣列。當我print_r $ test_array [0];我得到一個數組,但爲什麼這個數組等於1?也是這樣做是把它放在兩個數組,但似乎沒有這樣做的子數組值?另外,當我使用日期時,它將需要動態地添加更多的數組,因爲將有更多的值被分組。 – 2013-03-05 12:15:16

+0

那麼你必須使用自動生成的'$ array [$ i]'而不是'$ array_1'和'$ array_2' – Raptor 2013-03-05 17:15:17

0

array_multisort()是你以後它可以讓你通過子數組排序主陣列和維護密鑰值鏈接

我用的是下面的排序一個相當沉重的多維數組基於關閉排序箭頭asc/desc放在有許多列和可排序列的表上。它的混亂,但你應該能夠遵循它。

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