2016-11-18 8 views
0

おはよう在庫のために車を売ったら自動で更新したいと思います。2倍の2次元配列をループで比較する

$array_purchase = array(
    array(
     'Name' => 'Mercedes', 
     'Purchase' => 10 
    ), 
    array(
     'Name' => 'BMW', 
     'Purchase' => 20 
    ), 
    array(
     'Name' => 'FIAT', 
     'Purchase' => 30 
) 
); 


$array_sales = array(
    array(
     'Name' => 'Mercedes', 
     'Purchase' => 5 
    ), 
    array(
     'Name' => 'BMW', 
     'Purchase' => 10 
    ) 
); 

が、私はこれを使用しようとしましたが、私のために動作しませんでした:

foreach($array_sales as $sName => $sSold){ 

    if(isset($array_purchase[$sName])){ 
     $array_purchase[$sName] - $sSold; 
    } 

} 

結果べき

メルセデスのようなもの:5Xを私は2倍2次元配列を持っています(10-5)

フィアット:30x (30から0)

BMW:10X (20から10)

任意の助けが理解されるであろう。

お時間をいただきありがとうございます。

答えて

1

ご希望の場合データをそのように構造化したままにしておくと、これがあなたの解決策です。

コード:

foreach ($array_sales as $keySales => $sales) { 

    foreach ($array_purchase as $keyPurchase => &$purchase) { 
     if ($purchase[ 'Name' ] == $sales[ 'Name' ]) { 
      $purchase[ 'Purchase' ] -= $sales[ 'Purchase' ]; 
      //break the 2nd foreach 
      break; 
     } 
    } 
    //unset the reference! 
    unset ($purchase); 
} 

print_r($array_purchase); 

結果:

Array 
(
    [0] => Array 
     (
      [Name] => Mecedes 
      [Purchase] => 5 
     ) 

    [1] => Array 
     (
      [Name] => BMW 
      [Purchase] => 10 
     ) 

    [2] => Array 
     (
      [Name] => FIAT 
      [Purchase] => 30 
     ) 

) 

あなたはPHPの配列の理解のビットが欠けている、ネット上でいくつかの良い例は、単にいくつかのグーグル、http://php.net/manual/en/language.types.array.php、があります。

1
foreach($array_purchase as $key => $value){ 
    if(isset($array_sales[$key]['Purchase'])){ 
     echo($array_purchase[$key]['Name']." ".($array_purchase[$key]['Purchase'] - $array_sales[$key]['Purchase'])); 
     echo("<br />"); 
    } else { 
     echo($array_purchase[$key]['Name']." ".$array_purchase[$key]['Purchase']); 
     echo("<br />"); 
    } 
}; 

このコードでは、オフラインで最適化することができますが、データをどのようにループするかを知ることができます。

+0

この解決策では、2つのアレイが常に両方のアレイで同じキー(インデックス)を持っていることを前提としています。私はそれが現実的かどうかわからない。 – klodoma

+0

これは必須条件ではありませんでした。 @クロドーマ – Werner

0

あなたは1次元配列に多次元配列を変換してから購入アレイ上の簡単なsubstract操作を行うことができます。

$array_purchase = transformToSingleDimension($array_purchase); 
$array_sales = transformToSingleDimension($array_sales); 

$result = arraySubstract($array_purchase, $array_sales); 

var_dump($result); 

function transformToSingleDimension($array) 
{ 
    return array_reduce($array, function ($carry, $item) { 
     $carry[$item['Name']] = $item['Purchase']; 
     return $carry; 
    }, array()); 
} 

function arraySubstract($array1, $array2) 
{ 
    foreach ($array1 as $key => &$value) { 
     if (isset($array2[$key])) { 
      $value -= $array2[$key]; 
     } 
    } 

    return $array1; 
} 

結果は次のようになります。

array(3) { ["Mecedes"]=> int(5) ["BMW"]=> int(10) ["FIAT"]=> int(30) }