2013-03-05 4 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 
    ) 

) 

뭔가 될 것 원하는 것은

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

이 있어야 더 최적화 : 그들은 하위 배열 키 2를 기반으로 별도의 배열로 분할되는 경우이 같은 d 코드가 필요하지만 이는 사용자의 요구를 충족시켜야합니다.

+0

그래서이 작업은 2 개의 어레이를 만드는 것으로 이해합니다. 내가 print_r $ test_array [0]; 나는 배열을 얻지 만 그 배열은 왜 1과 같은가? 또한이 작업은 두 개의 배열에 배치되지만 하위 배열 값에서이 작업을 수행하지 않는 것입니까? 또한 날짜를 사용할 때 그룹화 할 값이 더 많아 지므로 배열을 동적으로 추가해야합니다. –

+0

그러면'$ array_1'과'$ array_2' 대신 자동 생성 된'$ array [$ i]'를 사용해야합니다 – 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); 
      }