2017-02-04 9 views
0

したがって、配列の重複値をマージしようとしていますが、値を合計します。多次元配列の合計値を返します。

だから気圧私は、この配列を得た:

[969] => Array 
    (
     [zip] => 8043 
     [total] => 2355.00 
     [orders] => 1 
    ) 

[968] => Array 
    (
     [zip] => 8225 
     [total] => 1195.00 
     [orders] => 1 
    ) 

[967] => Array 
    (
     [zip] => 8043 
     [total] => 1640.00 
     [orders] => 1 
    ) 

私は彼らが「ジップ」に基づいてマージし、このような何かになりたい:

 [969] => Array 
    (
     [zip] => 8043 
     [total] => 3995.00 
     [orders] => 2 
    ) 

[968] => Array 
    (
     [zip] => 8225 
     [total] => 1195.00 
     [orders] => 1 
    ) 

答えて

0

EDITED ANSWER、配列で動作しますランダムキーの

元々、私はこれは0 ...無限大の配列を扱っていましたが、すべてのキーを持っていなければならず、順番に並んでいなければなりませんでした。これは任意の数の配列キーと任意の順序で動作します。

<?php 

$array[10] = Array(
    'zip' => 8043, 
    'total' => 2355.00, 
    'orders' => 1 
); 

$array[1] = Array(
     'zip' => 8225, 
     'total' => 1195.00, 
     'orders' => 1 
); 

$array[44] = Array(
     'zip' => 8225, 
     'total' => 1195.00, 
     'orders' => 1 
); 

$array[2] = Array(
     'zip' => 8043, 
     'total' => 1640.00, 
     'orders' => 1 
); 
$array[3] = Array(
     'zip' => 8043, 
     'total' => 3434.00, 
     'orders' => 1 
); 

function mergeSimilarZip($array) { 
    sort($array); 
    $newArray = array(); 
    $k = 0; 
    for ($i = 0; $i < count($array); $i++) { 
     $newArray[$k]['zip'] = $array[$i]['zip']; 
     $newArray[$k]['total'] = $array[$i]['total']; 
     $newArray[$k]['orders'] = $array[$i]['orders']; 
     for ($j = $i + 1; $j < count($array); $j++) { 
     if ($array[$i]['zip'] == $array[$j]['zip']) { 
      $newArray[$k]['total'] += $array[$j]['total']; 
      $newArray[$k]['orders']++; 
      unset($array[$j]); 
     } 
     } 
    sort($array); 
    $k++; 
    } 
    return $newArray; 
} 

$newArray = mergeSimilarZip($array); 

var_dump($newArray); 

出力:

array (size=2) 
    0 => 
    array (size=3) 
     'zip' => int 8043 
     'total' => float 7429 
     'orders' => int 3 
    1 => 
    array (size=3) 
     'zip' => int 8225 
     'total' => float 2390 
     'orders' => int 2 
+0

これは、私はいくつかのジップコードが取り残された気づいたそれまでは、動作するように見えました。私は私の配列で2回表示されているジップ5625を持っていますが、私はそれらをマージするためにあなたのコードを使用すると、5626は完全に消えます。 – TTS

+0

私はちょうど答えを編集し、その新しいコードを試してみてください。 –

+0

あなたのコードはトリックでした、ありがとう! – TTS