素材牛VIP会员
php数组对比unset问题
 lx***rx  分类:PHP代码  人气:1139  回帖:8  发布于6年前 收藏

根据数组二 含有的值 5 4 1 把上面的数组一不存在 key 不是 5 4 1的unset 求最简单写法。哈

// 数组一
array(6) {
  [1] => string(12) "伊凡木门"
  [2] => string(12) "梦天木门"
  [3] => string(15) "大自然地板"
  [4] => string(12) "尚品宅配"
  [5] => string(15) "德国都芳漆"
  [6] => string(12) "左右沙发"
}
数组二
array(3) {
  [0] => int(5)
  [1] => int(4)
  [2] => int(1)
}
 标签:php

讨论这个帖子(8)垃圾回帖将一律封号处理……

Lv1 新人
黄***o JS工程师 6年前#1

根据数组二 含有的值 5 4 1 把上面的数组一不存在 key 不是 5 4 1的unset 求最简单写法。哈
表示看不懂

<?php
$keys1 = array_keys($array1); // 获取数组1key列表
$diffKeys = array_diff($keys1,$array2);// 结算数组1和数组2 key差集
foreach($diffKeys as $key){
    unset($array1[$key]);
}
Lv6 码匠
qx***23 Linux系统工程师 6年前#2

可以了解下array_slice 这个函数

Lv1 新人
袜***了 PHP开发工程师 6年前#3

创建一个新的数组用来存放你要保留的值。然后循环遍历数组二,再用array_push函数把数组一中要保留的值push到新建的数组中。

Lv5 码农
诸***1 移动开发工程师 6年前#4
$arr1 = array(
    1 => "伊凡木门", 
    2 => "梦天木门",
    3 => "大自然地板",
    4 => "尚品宅配",
    5 => "德国都芳漆",
    6 => "左右沙发"
);
$arr2 = array(5, 4, 1);
$keys = array_keys($arr1);
$remove = array_diff($keys, $arr2);
foreach ($remove as $key) {
    unset($arr1[$key]);
}
var_dump($arr1);
Lv5 码农
龙***6 UI设计师 6年前#5

可以利用array_diff系列的函数来操作,具体业务具体使用array_diff_key或者assoc自己决定就可以了。

Lv6 码匠
骨***活 产品经理 6年前#6

先翻转数组2,再求交集,你的解法我看是正解

Lv3 码奴
随***火 站长 6年前#7

我最后用下面的方法解决。如果大神们有更好的写法请不吝赐教

    function get_vip_brand_list($uid = UID)
    {
        // 第一个数组
        $brand_list = config('sales_brand');
        // 第二个数组,反转键和值
        $node       = array_flip(get_auth_node($uid,'sales.brand'));
        // 比较两个数组的键名,并返回交集
        $vip_node   = array_intersect_key($brand_list, $node);
        return $vip_node;
    }
Lv4 码徒
蹲***圈 JS工程师 6年前#8
foreach($arr2 as $value) {
    foreach($arr1 as $key => $val) {
        if($value == $key) {
            unset($arr1[$key]);
        }
    }
}
print_r($arr1);
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取