繁体   English   中英

根据比较同一数组中的两个数组值来取消设置数组键

[英]unset array keys based on comparing two array values in the same array

我试图找出一种简单的方法来删除/重置重复的数组值,基于php中数组中较高的辅助值。

这是原始数组的一个简单示例。

$ar = array(
    array('pid'=>'544', 'discount'=>'26.00','promo_id'=>'9807'),
    array('pid'=>'544', 'discount'=>'15.00','promo_id'=>'9821'),
    array('pid'=>'544', 'discount'=>'21.00','promo_id'=>'9811'),
    array('pid'=>'2965','discount'=>'25.00','promo_id'=>'9810'),
    array('pid'=>'2965','discount'=>'30.50','promo_id'=>'9809'),
    array('pid'=>'1866','discount'=>'30.00','promo_id'=>'9810'),
    array('pid'=>'1866','discount'=>'25.50','promo_id'=>'9809')
);

这将是我想要的新数组。

$ar = array(
    array('pid'=>'544', 'discount'=>'26.00','promo_id'=>'9807'),
    array('pid'=>'2965','discount'=>'30.50','promo_id'=>'9809'),
    array('pid'=>'1866','discount'=>'30.00','promo_id'=>'9810'),
);

这些将是已删除的密钥。

//array('pid'=>'1866','discount'=>'25.50','promo_id'=>'9809')  Removed!
//array('pid'=>'544', 'discount'=>'21.00','promo_id'=>'9811'), Removed!
//array('pid'=>'544', 'discount'=>'15.00','promo_id'=>'9821'), Removed!
//array('pid'=>'2965','discount'=>'25.00','promo_id'=>'9810'), Removed!

我想通过保留 'discount'的最高值来删除'pid'的所有重复值。

该数组可能有两个以上具有相同'pid'键,但它们永远不会具有相同的'pid''promo_id'

希望有一个简单的解决方案。

编辑:

这是我一直在尝试的。

foreach($ar as $tkey => $v) {

    $tPID = $v['pid'];
    $tDISC = $v['discount'];

    if ($tPID) {

        $key = array_search($tPID, array_column($ar, 'pid'));
        $aPID  = $ar[$key]['pid'];
        $aTPRD = $ar[$key]['discount'];

        if ($aTPRD < $tDISC) {
            echo '(UN:'.$tkey.')'; unset($ar[$tkey]);
        }else
        if ($aTPRD > $tDISC) {
            echo '(UN:'.$key.')'; unset($ar[$key]);
        }else{echo 'else'; }

    }
}

创建一个输出数组,键入“ pid”,其中包含为pid找到的最高折扣条目。

使用“ array_values”提取输出数组。

Codepad.org上的工作代码...

建议对代码进行编辑以使其更短。 但是,我尝试确保代码易于理解,而不是尝试使代码最少。 无论如何,这段代码都是非常有效的。

 <?php //

$ar = array(
    array('pid'=>'544', 'discount'=>'26.00','promo_id'=>'9807'),
    array('pid'=>'544', 'discount'=>'15.00','promo_id'=>'9821'),
    array('pid'=>'544', 'discount'=>'21.00','promo_id'=>'9811'),
    array('pid'=>'2965','discount'=>'25.00','promo_id'=>'9810'),
    array('pid'=>'2965','discount'=>'30.50','promo_id'=>'9809'),
    array('pid'=>'1866','discount'=>'30.00','promo_id'=>'9810'),
    array('pid'=>'1866','discount'=>'25.50','promo_id'=>'9809')
);

$outUnique = array();

foreach ($ar as $entry) {

    $curPid = $entry['pid'];

    if (isset($outUnique[$curPid])) { // check the discount

        if ($entry['discount'] > $outUnique[$curPid]['discount']) {
            $outUnique[$curPid] = $entry;
        }
    }
    else { // add to the output

        $outUnique[$curPid] = $entry;
    }
}
// show the entries
var_dump(array_values($outUnique));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM