2013-03-05 37 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); 
      }