2016-11-18 77 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) }