2012-08-15 155 views
1

我有一组包含买入和卖出交易的数据。我试图根据日期对交易进行分组,然后在自己的集团内巩固买入/卖出。输入我有如下:重新排序/重新排列多维数组

Array 
(
    [0] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2011-02-14 
      [instrument] => USD/CAD 
      [units] => 2000.0 
      [gbp_amount] => 12.4869 
      [costs] => 0 
      [duty] => 0 
     ) 

    [1] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2011-02-14 
      [instrument] => USD/CAD 
      [units] => 2000.0 
      [gbp_amount] => 14.62840335 
      [costs] => 0 
      [duty] => 0 
     ) 

    [2] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2011-02-15 
      [instrument] => USD/CAD 
      [units] => 4000.0 
      [gbp_amount] => 24.80064 
      [costs] => 0 
      [duty] => 0 
     ) 

    [3] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2011-02-15 
      [instrument] => USD/CAD 
      [units] => 4000.0 
      [gbp_amount] => 30.32498256 
      [costs] => 0 
      [duty] => 0 
     ) 

    [4] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2011-02-21 
      [instrument] => USD/CAD 
      [units] => 4000.0 
      [gbp_amount] => 24.63168 
      [costs] => 0 
      [duty] => 0 
     ) 

    [5] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2011-02-21 
      [instrument] => USD/CAD 
      [units] => 4000.0 
      [gbp_amount] => 26.633004 
      [costs] => 0 
      [duty] => 0 
     ) 

    [6] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2011-02-21 
      [instrument] => USD/CAD 
      [units] => 4000.0 
      [gbp_amount] => 24.63168 
      [costs] => 0 
      [duty] => 0 
     ) 

    [7] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2011-02-22 
      [instrument] => USD/CAD 
      [units] => 4000.0 
      [gbp_amount] => 27.0270324 
      [costs] => 0 
      [duty] => 0 
     ) 

    [8] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2011-02-21 
      [instrument] => USD/CAD 
      [units] => 2000.0 
      [gbp_amount] => 12.31584 
      [costs] => 0 
      [duty] => 0 
     ) 

    [9] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2011-02-22 
      [instrument] => USD/CAD 
      [units] => 2000.0 
      [gbp_amount] => 13.88811768 
      [costs] => 0 
      [duty] => 0 
     ) 

    [10] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2011-04-21 
      [instrument] => USD/CAD 
      [units] => 1000.0 
      [gbp_amount] => 12.09882 
      [costs] => 0 
      [duty] => 0 
     ) 

    [11] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2011-04-22 
      [instrument] => USD/CAD 
      [units] => 1000.0 
      [gbp_amount] => 13.87129713 
      [costs] => 0 
      [duty] => 0 
     ) 

    [12] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 13.5 
      [gbp_amount] => 0.8517069 
      [costs] => 0 
      [duty] => 0 
     ) 

    [13] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 13.5 
      [gbp_amount] => 0.8517069 
      [costs] => 0 
      [duty] => 0 
     ) 

    [14] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 27.0 
      [gbp_amount] => 0.68136552 
      [costs] => 0 
      [duty] => 0 
     ) 

    [15] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 27.0 
      [gbp_amount] => 0.68136552 
      [costs] => 0 
      [duty] => 0 
     ) 

    [16] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 13.5 
      [gbp_amount] => 0.34068276 
      [costs] => 0 
      [duty] => 0 
     ) 

    [17] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 13.5 
      [gbp_amount] => 0.34068276 
      [costs] => 0 
      [duty] => 0 
     ) 

    [18] => stdClass Object 
     (
      [action] => Buy 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 13.5 
      [gbp_amount] => 0.34068276 
      [costs] => 0 
      [duty] => 0 
     ) 

    [19] => stdClass Object 
     (
      [action] => Sell 
      [date] => 2012-02-01 
      [instrument] => USD/CAD 
      [units] => 13.5 
      [gbp_amount] => 0.34068276 
      [costs] => 0 
      [duty] => 0 
     ) 

) 

我期待达到的输出是这样的:

Array 
(
    [2011-02-14] => stdClass Object 
      [Buy] => Array 
       [0] = Array 
        (
         [instrument] => USD/CAD 
         [units] => 2000.0 
         [gbp_amount] => 12.4869 
         [costs] => 0 
         [duty] => 0 
        ) 

      [Sell] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 2000.0 
         [gbp_amount] => 14.62840335 
         [costs] => 0 
         [duty] => 0 
        ) 

    [2011-02-15] => stdClass Object 
      [Buy] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 4000.0 
         [gbp_amount] => 24.80064 
         [costs] => 0 
         [duty] => 0 
        ) 

      [Sell] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 4000.0 
         [gbp_amount] => 30.32498256 
         [costs] => 0 
         [duty] => 0 
        ) 

    [2011-02-21] => stdClass Object 
      [Buy] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 4000.0 
         [gbp_amount] => 24.63168 
         [costs] => 0 
         [duty] => 0 
        ) 
       [1] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 4000.0 
         [gbp_amount] => 24.63168 
         [costs] => 0 
         [duty] => 0 
        ) 

      [Sell] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 4000.0 
         [gbp_amount] => 26.633004 
         [costs] => 0 
         [duty] => 0 
        ) 

    [2011-02-22] => stdClass Object 
      [Buy] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 2000.0 
         [gbp_amount] => 12.31584 
         [costs] => 0 
         [duty] => 0 
        ) 

      [Sell] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 4000.0 
         [gbp_amount] => 27.0270324 
         [costs] => 0 
         [duty] => 0 
        ) 

       [1] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 2000.0 
         [gbp_amount] => 13.88811768 
         [costs] => 0 
         [duty] => 0 
        ) 

    [2011-04-21] => stdClass Object 
      [Buy] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 1000.0 
         [gbp_amount] => 12.09882 
         [costs] => 0 
         [duty] => 0 
        ) 

    [2011-04-22] => stdClass Object 
      [Sell] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 1000.0 
         [gbp_amount] => 13.87129713 
         [costs] => 0 
         [duty] => 0 
        ) 

    [2012-02-01] => stdClass Object 
      [Buy] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 13.5 
         [gbp_amount] => 0.8517069 
         [costs] => 0 
         [duty] => 0 
        ) 

       [1] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 27.0 
         [gbp_amount] => 0.68136552 
         [costs] => 0 
         [duty] => 0 
        ) 

       [2] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 13.5 
         [gbp_amount] => 0.34068276 
         [costs] => 0 
         [duty] => 0 
        ) 

       [3] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 13.5 
         [gbp_amount] => 0.34068276 
         [costs] => 0 
         [duty] => 0 
        ) 

      [Sell] => Array 
       [0] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 13.5 
         [gbp_amount] => 0.8517069 
         [costs] => 0 
         [duty] => 0 
        ) 

       [1] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 27.0 
         [gbp_amount] => 0.68136552 
         [costs] => 0 
         [duty] => 0 
        ) 

       [2] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 13.5 
         [gbp_amount] => 0.34068276 
         [costs] => 0 
         [duty] => 0 
        ) 

       [3] => Array 
        (
         [instrument] => USD/CAD 
         [units] => 13.5 
         [gbp_amount] => 0.34068276 
         [costs] => 0 
         [duty] => 0 
        ) 

) 

我使用的foreach循环尝试重新安排数组,但我有除了按交易日期列出交易之外,还有一点成功,但我无法根据买入/卖出列出这些交易。任何帮助将不胜感激。

回答

2

这应该做到这一点:

$res = array(); 
foreach ($items as $item) { 
    $tmp = (array)$item; 
    unset($tmp['date'], $tmp['action']); 
    $res[$item->date][$item->action][] = $tmp; 
} 
print_r($res); 

它投射的每个对象到一个数组,用途(然后删除)日期和操作字段作为用于所得阵列的键和瞧:)

+0

甲比我想象的更简单的解决方案,谢谢。 – Michael 2012-08-15 13:45:38