2011-12-07 7 views
2

나는 너를 $array 다음과 같습니다PHP에서 값을 기반으로 배열을 그룹화하는 방법은 무엇입니까?

[0] => Array 
    (
     [cd] => 1676 
     Array 
      (
      [0] => Array 
       (
       [amt_1] => 199.50 
       ) 
      [1] => Array 
       (
       [amt_1] => 69.90 
       ) 
     [fname] => Joe 
     [lname] => A 
    ) 
    [1] => Array 
    (
     [cd] => 1676 
     Array 
      (
      [0] => Array 
       (
       [amt_1] => 199.50 
       ) 
      [1] => Array 
       (
       [amt_1] => 69.90 
       ) 
     [fname] => Tracy 
     [lname] => A 
    ) 
    ........ 

I :

내가 할 노력하고 있어요
Array 
(
[0] => Array 
    (
     [cd] => 1675 
     [amt_1] => 199.50 
     [fname] => Joe 
     [lname] => A 
    ) 

[1] => Array 
    (
     [cd] => 1675 
     [amt_1] => 69.90 
     [fname] => Joe 
     [lname] => A 
    ) 

[2] => Array 
    (
     [cd] => 1676 
     [amt_1] => 69.90 
     [fname] => Tracy 
     [lname] => A 
    ) 

[3] => Array 
    (
     [cd] => 1676 
     [amt_1] => 199.50 
     [fname] => Tracy 
     [lname] => A 
    ) 
... 
) 

fname 또는 내가 좋아하는 뭔가를해야합니다 너무 cd에 의해,이 경우에는 함께 그룹화하는 것입니다 그것을 알아낼 수없는 것 같습니다. 이것은 mysql에서 할 수 없다. PHP에서해야한다.

아이디어가 있으십니까?

편집

감사합니다 : 나는 결과 예제는 올바른 형식이되지 않는다는 것을 알고 있지만, 기본적으로 나는 fname 및 결과의 나머지 부분은 배열에 배치를 결합하려는.

편집 :

@Paulo H 좋은 생각이있다.

$groups = array(); 
    foreach ($the_array as $item) { 
     $key = $item ['fname']; 
     if (! isset ($groups [$key])) { 
      $groups [$key] = array ('items' => array ($item), 'count' => 1); 
     } else { 
      $groups [$key] ['items'] [] = $item; 
      $groups [$key] ['count'] += 1; 
     } 
    } 
+0

무엇도 나는 그것을 결합하지 함께 그룹 그것을하는 다른 방법을 찾았나요? –

+0

트레이시 또한 방금 예제를주었습니다 – Patrioticcow

+0

원하는 결과 배열의 형식이 잘못되었습니다. 배열'array (0 => array ('amt_1'=> 199.50 '), 1 => 배열 ('amt_1 '=> 69.90) 그리고 트레이시는 어떻게 그걸 볼 것인가? – Shad

답변

1

이 시도 : 트레이시에 대한

function &array_group_value_by($input_array,$value,$by){ 
    $result = array(); 
    foreach($input_array as $array){ 
     if(!isset($result[$array[$by]])){ 
      $result[$array[$by]] = array(); 
     } 
     foreach($array as $key=>$data){ 
      if((is_string($value) && $key==$value) || (is_array($value) && in_array($key,$value))){ 
       if(!isset($result[$array[$by]][$key])){ 
        $result[$array[$by]][$key] = array(); 
       } 
       $result[$array[$by]][$key][] = $data; 
      }else{ 
       $result[$array[$by]][$key] = $data; 
      } 
     } 
    } 
    return $result; 
} 

$grouped = array_group_value_by($yourarray,'amt_1','fname'); 
print_r($grouped); 
+0

일종의, 나는 몇 가지를 바꿨다. 그리고 고마워요 전나무 아이디어 – Patrioticcow

관련 문제