首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环通过2x二维数组进行比较

循环通过2x二维数组进行比较
EN

Stack Overflow用户
提问于 2016-11-18 08:12:59
回答 3查看 50关注 0票数 0

早上好,对于库存清单,我想在我们出售汽车时自动更新。我有2x二维数组:

代码语言:javascript
复制
$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
    )
);

我试着用这个,但对我没用:

代码语言:javascript
复制
foreach($array_sales as $sName => $sSold){

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

}

结果应该是

梅赛德斯:5倍(10-5) 菲亚特:30倍(30-0) 宝马:10倍(20-10)

任何帮助都将不胜感激。

提前谢谢你的时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-18 08:39:20

如果您希望以这种方式对数据进行结构化,那么这就是您的解决方案:

代码:

代码语言:javascript
复制
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 );

结果:

代码语言:javascript
复制
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,只是google一些。

票数 1
EN

Stack Overflow用户

发布于 2016-11-18 08:30:18

代码语言:javascript
复制
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 />");
   }
};

这段代码可以被优化很多,但是它会给你一个很好的想法,你应该如何循环数据。

票数 1
EN

Stack Overflow用户

发布于 2016-11-18 08:30:30

您可以将多维数组转换为一维数组,然后对购买数组执行简单的子串操作:

代码语言:javascript
复制
$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;
}

其结果将是:

代码语言:javascript
复制
array(3) { ["Mecedes"]=> int(5) ["BMW"]=> int(10) ["FIAT"]=> int(30) }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40672205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档