从数组php中删除自定义对象

我有一张带礼品卡的桌子 1,2,3 .... 100 $ 礼品卡用户电话我要 123$


我根据他的要求告诉他,他必须使用哪张卡

我有这个数组


Array

(

[0] => Array

    (

        [Card_1] => 20 $

        [Card_2] => 50 $

    )


[1] => Array

    (

        [Card_1] => 50 $

        [Card_2] => 20 $

    )


[2] => Array

    (

        [Card_1] => 40 $

        [Card_2] => 50 $

    )


[3] => Array

    (

        [Card_1] => 50 $

        [Card_2] => 40 $

    )

)

我有这个功能


function DeleteDup ($allcard){

    foreach ($allcard as $key => $all) {

        for ($i = 0; $i < count ($allcard); $i++) {


            $new = array();

            $new["Card_1"] = $allcard[$i]["Card_2"];

            $new["Card_2"] = $all["Card_1"];


            if($new == $all){

                unset($allcard[$key]);

            }

        }

    }

    return $allcard;

}

我想保留这两个项目之一


[2] => Array

    (

        [Card_1] => 40 $

        [Card_2] => 50 $

    )


[3] => Array

    (

        [Card_1] => 50 $

        [Card_2] => 40 $

    )

并删除其中一个


请帮我


我测试了一切


这是两个不同的键,但在不同的位置相等


GCT1015
浏览 143回答 3
3回答

慕妹3242003

如果您试图只保留一个值总和相同的条目,请尝试以下操作:$sums&nbsp; &nbsp;= array_map('array_sum', $allcard);$uniq&nbsp; &nbsp;= array_unique($sums);$result = array_diff_key($allcard, $uniq);对每个数组中的数字求和仅获取唯一的总和值计算密钥的差异以仅获取唯一的密钥单线:$result = array_diff_key($allcard, array_unique(array_map('array_sum', $allcard)));这将适用于数值或类似的数值50 $将被转换为正确的数值。它不适用于$50将被强制转换为0.由于您可能拥有 ( 50and 40) 和 ( 60and 30) 的总和相同,因此这可能不是您想要的。这比较了实际值:$sorted = array_map(function($v) { sort($v); return $v; }, $allcard);$result = array_map('unserialize', array_unique(array_map('serialize', $sorted)));对每个子数组进行排序,使它们具有相同的序列化值将每个子数组序列化为字符串并获取唯一值反序列化每个子数组单线:$result&nbsp; = array_map('unserialize', array_unique(array_map('serialize', array_map(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;function($v) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sort($v); return $v;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}, $allcard))));

白衣染霜花

最终代码是:$sums = array_map ( 'array_sum' , $allcard );$uniq = array_unique ( $sums );$result = array_diff_key ( $allcard , $uniq );foreach ($allcard as $key => $all) {&nbsp; &nbsp; if ($all["Card_1"] == $all["Card_2"]) {&nbsp; &nbsp; &nbsp; &nbsp; array_push ( $result , $all );&nbsp; &nbsp; }}

芜湖不芜

看起来您正在尝试过滤掉不包含 40 或 50 作为其值的数组。您可以使用array_filter来做到这一点:此函数将数组作为第一个参数,将回调作为第二个参数。它将解析数组的每个元素,如果当前元素通过回调中的条件,它将被推入一个新数组,该数组将由函数返回。$array = [...]$filteredArray = array_filter($array, function($item) {&nbsp; &nbsp; // if the item passes this condition, it will in the filteredArray&nbsp; &nbsp; return in_array($item['Card_1'], ['40 $', '50 $']) && in_array($item['Card_2'], ['40 $', '50 $'])});在这里我使用该功能in_array,因为我不想进行 4 次检查。您可以随意更改条件,基本概念保持不变PS此代码未经测试,请不要只是复制和粘贴它期望一切正常。尝试了解我所做的并将此概念应用于您的代码。
打开App,查看更多内容
随时随地看视频慕课网APP