2011-11-01 37 views
0

我有这种情况:如何在PHP中安排数组?

foreach ($test as $keys => $val) {  
print_r($val); echo '<br>'; 
} 

Array ([NAME] => John [ps_date] => 20111031 [amount] => 119.94) 
Array ([NAME] => John [ps_date] => 20111031 [amount] => 119.94) 
Array ([NAME] => John [ps_date] => 20111031 [amount] => 69.90) 
Array ([NAME] => Doe [ps_date] => 20111031 [amount] => 119.94) 
Array ([NAME] => Doe [ps_date] => 20111101 [amount] => 69.90) 
Array ([NAME] => Doe [ps_date] => 20111031 [amount] => 199.50) 

我想做的事就是安排他们如此:

Array ([NAME] => John 
      array([ps_date] => 20111031 [amount] => 119.94) 
      array([ps_date] => 20111031 [amount] => 119.94) 
      array([ps_date] => 20111031 [amount] => 69.90) 
Array ([NAME] => Doe 
      array([ps_date] => 20111031 [amount] => 119.94) 
      array([ps_date] => 20111101 [amount] => 69.90) 
      array([ps_date] => 20111031 [amount] => 199.50) 

什么想法?

感谢

+0

你目前的PHP代码? –

+0

使用foreach循环编辑的代码 – Patrioticcow

回答

0
function arrange_array($array) { 
    $result = Array(); 
    foreach($array as $values) { 
     $name = $values['NAME']; 
     unset($values['NAME']); 
     if(!is_array($result[$name])) $result[$name] = Array();     
     $result[$name][] = $values; 
    } 
    return $result; 
} 
+0

我的解决方案比deceze的解决方案快4倍 - [demo](http://codepad.viper-7.com/bmdWsp)。它不会产生通知错误 – Peter

+0

感谢所有,最后它的工作 – Patrioticcow

+0

@Peter当然,如果在巨阵上运行数百次,它会产生显着的差异。在正常情况下,尽管我比较喜欢我的版本。而且它也不会产生任何通知。 – deceze

0
$arranged = array(); 
foreach ($test as $val) { 
    $arranged[$val['NAME']][] = array_diff_key($val, array('NAME' => null)); 
    $arranged[$val['NAME']] += array_intersect_key($val, array('NAME' => null)); 
} 
0
$result = array(); 
foreach ($values as $item) { 
    $result[$item['NAME']][] = array('ps_date' => $item['ps_date'], 'amount' => $item['amount']; 
}