2017-08-25 172 views
-1

我有以下動態創建的數組。排序具有特定要求的關聯數組

Array 
(
[1x2] => Array 
    (
     [AWAY] => Array 
      (
       [PL] => 1.6 
       [Yield] => 19.4 
       [YieldLS] => 19.4 
       [Picks] => 8 
       [Price] => 14.97 
       [Stake] => 8 
       [AvgStake] => 1 
       [AvgOdd] => 1.87 
      ) 

     [HOME] => Array 
      (
       [PL] => 6.9 
       [Yield] => 34.7 
       [YieldLS] => 34.7 
       [Picks] => 20 
       [Price] => 38.25 
       [Stake] => 20 
       [AvgStake] => 1 
       [AvgOdd] => 1.91 
      ) 

     [DRAW] => Array 
      (
       [PL] => 2.4 
       [Yield] => 240 
       [YieldLS] => 240 
       [Picks] => 1 
       [Price] => 3.4 
       [Stake] => 1 
       [AvgStake] => 1 
       [AvgOdd] => 3.4 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 10.9 
       [Yield] => 294.1 
       [YieldLS] => 294.1 
       [Picks] => 29 
       [Price] => 56.62 
       [Stake] => 29 
       [AvgStake] => 3 
       [AvgOdd] => 7.18 
      ) 

    ) 

[Asian Handicap] => Array 
    (
     [HOME] => Array 
      (
       [PL] => 41.9 
       [Yield] => 9.3 
       [YieldLS] => 9.3 
       [Picks] => 448 
       [Price] => 885.79 
       [Stake] => 448 
       [AvgStake] => 1 
       [AvgOdd] => 1.98 
      ) 

     [AWAY] => Array 
      (
       [PL] => 31.3 
       [Yield] => 7.1 
       [YieldLS] => 7.1 
       [Picks] => 439 
       [Price] => 877.33 
       [Stake] => 439 
       [AvgStake] => 1 
       [AvgOdd] => 2 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 73.2 
       [Yield] => 16.4 
       [YieldLS] => 16.4 
       [Picks] => 887 
       [Price] => 1763.12 
       [Stake] => 887 
       [AvgStake] => 2 
       [AvgOdd] => 3.98 
      ) 

    ) 

[Over/Under] => Array 
    (
     [OVER] => Array 
      (
       [PL] => 14.7 
       [Yield] => 10.1 
       [YieldLS] => 10.1 
       [Picks] => 145 
       [Price] => 281.45 
       [Stake] => 145 
       [AvgStake] => 1 
       [AvgOdd] => 1.94 
      ) 

     [UNDER] => Array 
      (
       [PL] => 14.1 
       [Yield] => 19.5 
       [YieldLS] => 19.5 
       [Picks] => 72 
       [Price] => 140.94 
       [Stake] => 72 
       [AvgStake] => 1 
       [AvgOdd] => 1.96 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 28.8 
       [Yield] => 29.6 
       [YieldLS] => 29.6 
       [Picks] => 217 
       [Price] => 422.39 
       [Stake] => 217 
       [AvgStake] => 2 
       [AvgOdd] => 3.9 
      ) 

    ) 
) 

我想要的是根據特定要求對其進行分類。例如,我需要爲

Array 
(
[1x2] => Array 
    (
     [HOME] => Array 
      (
       [PL] => 6.9 
       [Yield] => 34.7 
       [YieldLS] => 34.7 
       [Picks] => 20 
       [Price] => 38.25 
       [Stake] => 20 
       [AvgStake] => 1 
       [AvgOdd] => 1.91 
      ) 

     [DRAW] => Array 
      (
       [PL] => 2.4 
       [Yield] => 240 
       [YieldLS] => 240 
       [Picks] => 1 
       [Price] => 3.4 
       [Stake] => 1 
       [AvgStake] => 1 
       [AvgOdd] => 3.4 
      ) 

     [AWAY] => Array 
      (
       [PL] => 1.6 
       [Yield] => 19.4 
       [YieldLS] => 19.4 
       [Picks] => 8 
       [Price] => 14.97 
       [Stake] => 8 
       [AvgStake] => 1 
       [AvgOdd] => 1.87 
      ) 



     [TOTAL] => Array 
      (
       [PL] => 10.9 
       [Yield] => 294.1 
       [YieldLS] => 294.1 
       [Picks] => 29 
       [Price] => 56.62 
       [Stake] => 29 
       [AvgStake] => 3 
       [AvgOdd] => 7.18 
      ) 

    ) 

[Asian Handicap] => Array 
    (
     [HOME] => Array 
      (
       [PL] => 41.9 
       [Yield] => 9.3 
       [YieldLS] => 9.3 
       [Picks] => 448 
       [Price] => 885.79 
       [Stake] => 448 
       [AvgStake] => 1 
       [AvgOdd] => 1.98 
      ) 

     [AWAY] => Array 
      (
       [PL] => 31.3 
       [Yield] => 7.1 
       [YieldLS] => 7.1 
       [Picks] => 439 
       [Price] => 877.33 
       [Stake] => 439 
       [AvgStake] => 1 
       [AvgOdd] => 2 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 73.2 
       [Yield] => 16.4 
       [YieldLS] => 16.4 
       [Picks] => 887 
       [Price] => 1763.12 
       [Stake] => 887 
       [AvgStake] => 2 
       [AvgOdd] => 3.98 
      ) 

    ) 

[Over/Under] => Array 
    (
     [OVER] => Array 
      (
       [PL] => 14.7 
       [Yield] => 10.1 
       [YieldLS] => 10.1 
       [Picks] => 145 
       [Price] => 281.45 
       [Stake] => 145 
       [AvgStake] => 1 
       [AvgOdd] => 1.94 
      ) 

     [UNDER] => Array 
      (
       [PL] => 14.1 
       [Yield] => 19.5 
       [YieldLS] => 19.5 
       [Picks] => 72 
       [Price] => 140.94 
       [Stake] => 72 
       [AvgStake] => 1 
       [AvgOdd] => 1.96 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 28.8 
       [Yield] => 29.6 
       [YieldLS] => 29.6 
       [Picks] => 217 
       [Price] => 422.39 
       [Stake] => 217 
       [AvgStake] => 2 
       [AvgOdd] => 3.9 
      ) 

    ) 
) 

輸出在第一級1x2應該是第一個項目,然後Asian Handicap和最後Over/Under。同樣在1x2Handicap二級應該是Home, Draw, Away and Total。在Over/Under第二級是Over then Under and then Total。對於任何項目/元素缺失,我需要添加空記錄/數組。數字elementskeys將始終是固定的。

缺失情況下,可以是這樣的

Array 
(
[1x2] => Array 
    (
     [HOME] => Array 
      (
       [PL] => '' 
       [Yield] => '' 
       [YieldLS] => '' 
       [Picks] => '' 
       [Price] => '' 
       [Stake] => '' 
       [AvgStake] => '' 
       [AvgOdd] => '' 
      ) 

     [DRAW] => Array 
      (
       [PL] => 2.4 
       [Yield] => 240 
       [YieldLS] => 240 
       [Picks] => 1 
       [Price] => 3.4 
       [Stake] => 1 
       [AvgStake] => 1 
       [AvgOdd] => 3.4 
      ) 

     [AWAY] => Array 
      (
       [PL] => 1.6 
       [Yield] => 19.4 
       [YieldLS] => 19.4 
       [Picks] => 8 
       [Price] => 14.97 
       [Stake] => 8 
       [AvgStake] => 1 
       [AvgOdd] => 1.87 
      ) 



     [TOTAL] => Array 
      (
       [PL] => 10.9 
       [Yield] => 294.1 
       [YieldLS] => 294.1 
       [Picks] => 29 
       [Price] => 56.62 
       [Stake] => 29 
       [AvgStake] => 3 
       [AvgOdd] => 7.18 
      ) 

    ) 

[Asian Handicap] => Array 
    (
     [HOME] => Array 
      (
       [PL] => 41.9 
       [Yield] => 9.3 
       [YieldLS] => 9.3 
       [Picks] => 448 
       [Price] => 885.79 
       [Stake] => 448 
       [AvgStake] => 1 
       [AvgOdd] => 1.98 
      ) 

     [AWAY] => Array 
      (
       [PL] => '' 
       [Yield] => '' 
       [YieldLS] => '' 
       [Picks] => '' 
       [Price] => '' 
       [Stake] => '' 
       [AvgStake] => '' 
       [AvgOdd] => '' 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 73.2 
       [Yield] => 16.4 
       [YieldLS] => 16.4 
       [Picks] => 887 
       [Price] => 1763.12 
       [Stake] => 887 
       [AvgStake] => 2 
       [AvgOdd] => 3.98 
      ) 

    ) 

[Over/Under] => Array 
    (
     [OVER] => Array 
      (
       [PL] => 14.7 
       [Yield] => 10.1 
       [YieldLS] => 10.1 
       [Picks] => 145 
       [Price] => 281.45 
       [Stake] => 145 
       [AvgStake] => 1 
       [AvgOdd] => 1.94 
      ) 

     [UNDER] => Array 
      (
       [PL] => 14.1 
       [Yield] => 19.5 
       [YieldLS] => 19.5 
       [Picks] => 72 
       [Price] => 140.94 
       [Stake] => 72 
       [AvgStake] => 1 
       [AvgOdd] => 1.96 
      ) 

     [TOTAL] => Array 
      (
       [PL] => 28.8 
       [Yield] => 29.6 
       [YieldLS] => 29.6 
       [Picks] => 217 
       [Price] => 422.39 
       [Stake] => 217 
       [AvgStake] => 2 
       [AvgOdd] => 3.9 
      ) 

    ) 
) 

我已經使用單獨的陣列用於分選,但把缺少陣列的邏輯和排序立刻在複雜作出嘗試。任何幫助將不勝感激。

回答

1

我會用正確的順序製作一個空記錄的模板數組,然後迭代它並檢查源數組是否具有相同的關聯元素。

如果它存在且不爲空,則使用源覆蓋模板項目。 如果模板的順序是你需要的,那麼最後你有一個模板以正確的順序填充數據,如果你有空白,那麼模板的空數據就是填充的。

<?php 
$sourceWrongOrder = []; 


$emptyRecord = [ 
    'PL'  => '', 
    'Yield' => '', 
    'YieldLS' => '', 
    'Picks' => '', 
    'Price' => '', 
    'Stake' => '', 
    'AvgStake' => '', 
    'AvgOdd' => '', 
]; 

$template = [ 
    '1x2'   => 
     [ 
      'HOME' => $emptyRecord, 
      'AWAY' => $emptyRecord, 
      'TOTAL' => $emptyRecord, 
     ], 
    'Asian Handicap' => 
     [ 
      'HOME' => $emptyRecord, 
      'AWAY' => $emptyRecord, 
      'TOTAL' => $emptyRecord, 
     ], 
    'Over/Under'  => 
     [ 
      'OVER' => $emptyRecord, 
      'UNDER' => $emptyRecord, 
      'TOTAL' => $emptyRecord, 
     ] 
]; 

foreach ($template as $name => &$items) 
{ 
    foreach ($items as $title => &$item) 
    { 
     if (isset($sourceWrongOrder[$name][$title])) 
     { 
      $item = $sourceWrongOrder[$name][$title] 
     } 
    } 
} 

最後,您的$ template成爲正確的順序填充正確的數據。

+0

聽起來很不錯。我會試試這個。 –

+0

增加了一些示例代碼,但沒有經過測試,您可以驗證它嗎? – Fiber

+0

讓我試試他們。 –