2016-11-18 89 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 (10-5)

菲亞特:30X (30 - 0)

BMW:10倍(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

這不是一個要求。 @Klodoma – Werner

0

您可以將多維數組轉換成一維數組,然後做購買陣列上的簡單。減去操作:

$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) }