2016-06-14 21 views
-1

我有一个数组,但我想生成一个其他阵列生成阵列..如何从一个数组

Array 
    (
     [0] => Array 
      (
       [supplier] => Billy 
       [total_bookings] => 5 
       [year] => 2016 
       [month] => 6 
       [user_id] => 4 
       [sales_revenue] => 1180 
       [net_revenue] => 1180 
      ) 

    [1] => Array 
     (
      [supplier] => XYZ1 
      [total_bookings] => 3 
      [year] => 2016 
      [month] => 6 
      [user_id] => 2 
      [sales_revenue] => 642 
      [net_revenue] => 642 
     ) 

    [2] => Array 
     (
      [supplier] => Billy 
      [total_bookings] => 1 
      [year] => 2016 
      [month] => 3 
      [user_id] => 4 
      [sales_revenue] => 30 
      [net_revenue] => 30 
     ) 

    [3] => Array 
     (
      [supplier] => Billy 
      [total_bookings] => 1 
      [year] => 2015 
      [month] => 10 
      [user_id] => 4 
      [sales_revenue] => 30 
      [net_revenue] => 30 
     ) 

) 

到新的数组:

 Array 
    (
     [2016] => Array(
    [6] => Array 
     (

      [0] => Array( 

      [supplier] => Billy 
      [total_bookings] => 5 
      [user_id] => 4 
      [sales_revenue] => 1180 
      [net_revenue] => 1180 
     ) 

      [1] => Array 
      (
       [supplier] => XYZ1 
       [total_bookings] => 3 
       [user_id] => 2 
       [sales_revenue] => 642 
       [net_revenue] => 642 
      ) 

     ) 

     [3] => Array 
     (

      [0] => Array 
      (
       [supplier] => Billy 
       [total_bookings] => 1 
       [year] => 2016 
       [month] => 3 
       [user_id] => 4 
       [sales_revenue] => 30 
       [net_revenue] => 30 
      ) 


     ) 


    ) 

    [2015] => Array(

     [10] => Array 
     (
      [supplier] => Billy 
      [total_bookings] => 1 
      [user_id] => 4 
      [sales_revenue] => 30 
      [net_revenue] => 30 
     ) 

    ) 

) 
+0

你尝试用array_push()? –

+2

做一个foreach循环,并创建数组.. –

+0

foreach是唯一的方式或其他方式吗? –

回答

0

使用array_fill_keysarray_column解决方案(可用自PHP 5.5),array_walkarray_diff_key功能:

// supposing $arr is your initial array 
$years = array_fill_keys(array_column($arr, 'year'), []); 
array_walk($arr, function($v) use(&$years){ 
    if (key_exists($v['year'], $years)) { 
     $years[$v['year']][$v['month']][] = array_diff_key($v, ['year'=>0, 'month'=>0]); 
    } 
}); 
print_r($years); 
+0

谢谢你拯救我的一天 –

+0

@BhavinPatel,不客气 – RomanPerekhrest

0

试试这个,让我知道:

$new_arr = array(); 
foreach($arr as $val){ 
    $temp = array('supplier' => $val['supplier'], 'total_bookings' => $val['total_bookings'], 'user_id' => $val['user_id'], 'sales_revenue' => $val['sales_revenue'], 'net_revenue' => $val['net_revenue']); 
    array_push($new_arr[$val['year']][$val['month']], $temp); 
} 
print_r($new_arr); 
0

试试这个: -

$res = []; 
foreach($array as $record){ 
    $year = $record['year']; 
    $month = $record['month']; 
    unset($record['year'],$record['month']); 
    $res[$year][$month][] = $record; 
} 
echo '<pre>'; print_r($res); 
+0

它很好!!谢谢..代码工作,但没有删除年月键 –

+0

不客气:-)请检查我的更新答案。 –

+0

雅,其产生的实际产量 –