2011-12-07 12 views
2

私はあなたが$arrayを以下の持っている:phpの値に基づいて配列をグループ化するには?

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によって私はのようなものを持っていますように、グループにある:

[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それを理解しているようには見えない。 これは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 => array(' 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

関連する問題