2017-11-08 11 views
0

私は立ち往生して、あなたが私を助けることを望んでいます。PHP配列は、値が等しいときを計算します

私は、データベースから情報を取得し、二つの異なる配列

次の私は、それらをマージキーの値がユニークとリセット作ってるんだし、それらを入れています。

$totalMatch = array_merge($homeArray, $awayArray); 
$totalMatchClean = array_unique($totalMatch, SORT_REGULAR); 
$totalMatchCleanKey = array_values($totalMatchClean); 

結果は以下の通りです。

array (size=6) 
    0 => 
    array (size=6) 
     'Locatie' => string 'Thuis' (length=5) 
     'TeamID' => string '1' (length=1) 
     'Matches' => string '1' (length=1) 
     'GoalsVoor' => string '2' (length=1) 
     'GoalsTegen' => string '3' (length=1) 
     'DoelSaldo' => int -1 
    1 => 
    array (size=6) 
     'Locatie' => string 'Thuis' (length=5) 
     'TeamID' => string '3' (length=1) 
     'Matches' => string '1' (length=1) 
     'GoalsVoor' => string '1' (length=1) 
     'GoalsTegen' => string '4' (length=1) 
     'DoelSaldo' => int -3 
    2 => 
    array (size=6) 
     'Locatie' => string 'Thuis' (length=5) 
     'TeamID' => string '4' (length=1) 
     'Matches' => string '2' (length=1) 
     'GoalsVoor' => string '2' (length=1) 
     'GoalsTegen' => string '8' (length=1) 
     'DoelSaldo' => int -6 
    3 => 
    array (size=6) 
     'Locatie' => string 'Uit' (length=3) 
     'TeamID' => string '2' (length=1) 
     'Matches' => string '1' (length=1) 
     'GoalsVoor' => string '3' (length=1) 
     'GoalsTegen' => string '2' (length=1) 
     'DoelSaldo' => int 1 
    4 => 
    array (size=6) 
     'Locatie' => string 'Uit' (length=3) 
     'TeamID' => string '1' (length=1) 
     'Matches' => string '2' (length=1) 
     'GoalsVoor' => string '8' (length=1) 
     'GoalsTegen' => string '2' (length=1) 
     'DoelSaldo' => int 6 

これはほぼ完全には望んでいないものです。 配列0で見るように、TeamIDは1で、配列4ではTeamIDも1です。 これが当てはまる場合、次のフィールドを計算します。

この場合
Matches -> Total 
GoalsVoor -> Total 
GoalsTegen -> Total 
DoelSaldo -> Total 

これら2つのウィル新しいサブ配列

TeamID => string '1' 
Matches => string '3' 
GoalsVoor => string '10' 
GoalsTegen => string '5' 
DoelSaldo => string '5' 

しかし、重複しないところはまだ他に保つを作る... しかし、私はこれを取得するにはどのように絶対にないアイデアを持っていません。

私はあなたが私を助けることを願っています。私はこれが動作すると思います パトリック

アレイ輸出

array (0 => array ('Locatie' => 'Thuis', 'TeamID' => '1', 'Matches' => '1', 'GoalsVoor' => '2', 'GoalsTegen' => '3', 'DoelSaldo' => -1,), 1 => array ('Locatie' => 'Thuis', 'TeamID' => '3', 'Matches' => '1', 'GoalsVoor' => '1', 'GoalsTegen' => '4', 'DoelSaldo' => -3,), 2 => array ('Locatie' => 'Thuis', 'TeamID' => '4', 'Matches' => '2', 'GoalsVoor' => '2', 'GoalsTegen' => '8', 'DoelSaldo' => -6,), 3 => array ('Locatie' => 'Uit', 'TeamID' => '2', 'Matches' => '1', 'GoalsVoor' => '3', 'GoalsTegen' => '2', 'DoelSaldo' => 1,), 4 => array ('Locatie' => 'Uit', 'TeamID' => '1', 'Matches' => '2', 'GoalsVoor' => '8', 'GoalsTegen' => '2', 'DoelSaldo' => 6,), 5 => array ('Locatie' => 'Uit', 'TeamID' => '5', 'Matches' => '1', 'GoalsVoor' => '4', 'GoalsTegen' => '1', 'DoelSaldo' => 3,),) 
+0

は別々の配列にそれを計算します。または、1と4を組み合わせたいですか? –

+0

合計ではどういう意味ですか? 'Matches = 3'? – Andreas

+0

私はもう少し説明しようとしましたが、実際には1と4の合計(一致= 3)が必要です – PatrickStel

答えて

0


私はコードで使用できるようにあなたの配列をきれいにする気がしないので、私はそれをテストすることはできません。

しかし、コードは新しい配列を作成する必要があります。 キー(TeamID)を持つサブアレイが設定されている場合は、同じTeamIDを持つ新しい配列との合計になります。

$new =array(); 

Foreach($totalMatchCleanKey as $subarray){ 
    If(!isset($new[$subarray['TeamID']])){ 
     $new[$subarray['TeamID']] = $subarray; 
    }Else{ 

    $new[$subarray['TeamID']]['Matches'] += $subarray['Matches']; 
     $new[$subarray['TeamID']]['GoalsVoor'] += $subarray['GoalsVoor']; 
     $new[$subarray['TeamID']]['GoalsTegen'] += $subarray['GoalsTegen']; 
     $new[$subarray['TeamID']]['DoelSaldo'] += $subarray['DoelSaldo']; 
    } 
}  

Var_dump($new); 

ここでそれを試してみてください。https://3v4l.org/plSre

+0

警告が表示されたら、配列を整理します – PatrickStel

+0

申し訳ありませんが、私はarray_sumを使ってコードを更新できませんでした。多分それは動作します。警告は何ですか? – Andreas

+0

@Patrick use var_export(array) – Andreas

0

あなたがフィールドを取得するためにarray_reduce機能を使用することができますteamIDに基づいて総:

$totals = array_reduce($totalMatchCleanKey , function ($carry, $item) { 

    $key = array_search($carry, array_column($array, 'TeamID')) 

    if ($key === false) { 
     $carry[] = $item; 
    } else { 
     $carry[$key]['Matches'] += $item['Matches']; 
     $carry[$key]['GoalsVoor'] += $item['GoalsVoor']; 
     $carry[$key]['GoalsTegen'] += $item['GoalsTegen']; 
     $carry[$key]['DoelSaldo'] += $item['DoelSaldo']; 
    } 

    return $carry; 

}, []); 
+1

非常に良い解決策のように見えます。しかし 'if(!$ key)'もしarray_searchがtrueのようにkey = 0を返すならば、それは一致したものを見つけ、一致するキーは0で、ifはfalseを返します。 0 == falseなのであなたは 'if($ key!== false)' – Andreas

+0

@Andreasで解決できます。ありがとう、忘れましたが、 '($ key === false)' :) – YouneL

関連する問題