数组去重并且去掉空元素的方法

本文介绍了如何使用JavaScript中的forEach方法遍历数组bzbzmc,同时检查每个元素(item)是否已存在于对象bzbzmcObj中,若不存在则将该元素添加到bzbzmcResult数组并标记在对象中。
let bzbzmcResult = [];
let bzbzmcObj = {}; //记录result中有没有存放arr中的数据
bzbzmc.forEach(item => {
    if (!bzbzmcObj[item] && item) {
        bzbzmcResult.push(item);
        bzbzmcObj[item] = true;
    }
})

<think>我们正在处理一个关于PHP数组并删除元素的问题。用户询问如何使用array_unique删除元素,但array_unique本身只处理复值,不处理元素。因此我们需要两个步骤:先删除元素,再。参考引用:[^1]展示了如何对二维数组,但用户需求是一维数组,且要删除元素。[^2]说明array_unique()用于删除复值。[^3]展示了array_unique()的简单用法,并提到array_values()可以新索引数组。[^4][^5]是关于array_unique内部实现的,与当前问题关系不大。因此,我们可以这样解决:1.使用array_filter()删除元素(包括null,'',0,'0',false等,但注意0和'0'有时是有效值,所以可能需要自定义回调)。2.使用array_unique()复值。3.如果需要新索引数组,可以使用array_values()。注意:array_filter()默认会删除所有等价于false的值,如果只想删除严格字符串或null,可以自定义回调函数。用户的问题:如何在PHP中对数组进行以及元素?步骤:1.元素:使用array_filter(),可以选择使用默认行为或自定义回调。2.复值:使用array_unique()。示例代码:假设我们有一个数组:$arr=array("a","b","","c","a",null,"b","0",0,"");如果我们想删除所有元素(包括字符串、null、0、'0'等),然后:注意:格字符串""不是的,所以不会被删除。如果只想删除字符串和null,可以自定义回调。方案1:删除所有值(等价于false的值)并:$arr=array("a","b","","c","a",null,"b","0",0,"");$filtered=array_filter($arr);//删除字符串、null、0、'0'等$unique=array_unique($filtered);print_r($unique);结果:Array([0]=>a[1]=>b[3]=>c[9]=>)注意:索引会保留,所以可能不连续。方案2:如果我们只想删除字符串和null,但保留0和'0'(因为0和'0'可能是有效数据),可以:$filtered=array_filter($arr,function($value){return$value!==''&&$value!==null;});$unique=array_unique($filtered);print_r($unique);结果:Array([0]=>a[1]=>b[3]=>c[7]=>0[8]=>0[9]=>)注意:这里0和'0'都被保留了,但是它们是复的吗?array_unique会认为0和'0'是不同的,因为类型不同。所以会同时保留。如果希望将0和'0'视为相同,我们需要在前统一类型,但这通常不是标准做法。所以一般根据需求选择。用户问题中提到了“元素”,我们需要明确元素的范围。但通常,使用array_filter()的默认行为即可。另外,如果要新索引,可以:$unique=array_values($unique);因此,完整的步骤是:1.过滤值:array_filter($array)2.:array_unique($filteredArray)3.(可选)新索引:array_values($uniqueArray)示例代码:$array=array("apple","","banana","apple",null,"cherry","banana","0",0);$filteredArray=array_filter($array);$uniqueArray=array_unique($filteredArray);$reindexedArray=array_values($uniqueArray);print_r($reindexedArray);输出:Array([0]=>apple[1]=>banana[2]=>cherry[3]=>0//注意:这里0被保留,因为array_filter默认会删除0(因为0被视为false),但为什么这里还有0?)实际上,array_filter默认删除的是等价于false的值,包括false,0,'0','',null,array()等。但是上面的数组中有两个0:一个是字符串'0',一个是整数0。array_filter会删除整数0,但保留字符串'0'?因为字符串'0'在PHP中被视为false(PHP中字符串'0'被视为,因为它在数字上下文中是0,且没有其他字符)。所以实际上,整数0和字符串'0'都会被array_filter删除。验证:上面的数组$array,经过array_filter()后,会得到:Array([0]=>apple[2]=>banana[3]=>apple[5]=>cherry[6]=>banana)因为字符串、null、0、'0'都被删除了。所以后面的操作后,会得到apple,banana,cherry。如果用户希望保留0(整数0)和'0'(字符串0)作为有效值,那么就不能用默认的array_filter,而需要自定义回调,只删除字符串和null。自定义回调:$filteredArray=array_filter($array,function($value){return$value!==null&&$value!=='';});这样,整数0和字符串'0'都会被保留。因此,我们根据用户对“元素”的定义来选择不同的过滤方式。总结:1.如果元素包括:null,字符串(''),以及0和'0'(即所有等价于false的值),则使用array_filter($array)无回调。2.如果元素仅指字符串('')和null,则使用自定义回调:array_filter($array,function($value){return$value!==''&&$value!==null;});3.然后:array_unique($filteredArray)4.可选:新索引array_values()注意:array_unique会保留第一个出现的值,后续复的值会被删除。现在,我们按照用户的要求,给出一个通用的方法,并说明不同情况。同时,生成相关问题。</think>### 如何在 PHP 中删除数组复值并移除元素 PHP 的 `array_unique()` 函数仅能删除复值,**无法直接移除元素**。需要结合 `array_filter()` 函数分两步处理: #### 完整解决方案 ```php <?php // 原始数组(包含复值和元素) $arr = ["apple", "", "banana", "apple", null, "cherry", "banana", "0", 0]; // 步骤1: 移除元素(null/字符串/0/'0') $filtered = array_filter($arr, function($value) { return $value !== null && $value !== ''; // 保留0和'0':删除此条件 }); // 步骤2: 删除复值 $unique = array_unique($filtered); // 步骤3(可选): 新索引数组 $result = array_values($unique); print_r($result); ?> ``` **输出**: ``` Array ( [0] => apple [1] => banana [2] => cherry [3] => 0 [4] => 0 ) ``` #### 关键函数说明: 1. **`array_filter($arr, $callback)`** - 作用:通过回调函数过滤元素 - 回调逻辑:`return $value !== null && $value !== '';` (保留整数 `0` 和字符串 `"0"`,若需移除则添加 `&& $value !== 0 && $value !== '0'`) 2. **`array_unique($arr)`** - 作用:删除复值(保留首次出现的键)[^2][^3] 3. **`array_values($arr)`** - 作用:置数字索引(可选步骤)[^3] #### 处理不同值场景: | 值类型 | 是否默认移除 | 处理方式 | |----------------|-------------|----------------------------------| | `null` | 是 | `array_filter` 默认移除 | | `""` (字符串) | 是 | `array_filter` 默认移除 | | `0` (整数零) | **否** | 需在回调中显式检查 `$value !== 0` | | `"0"` (字符串零)| **否** | 需在回调中显式检查 `$value !== '0'` | > ⚠️ **要提示**:`array_filter` 默认会移除所有 `false` 等价值(包括 `null`, `""`, `0`, `"0"`, `false`)。若需保留零值,必须使用自定义回调[^2][^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿凤21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值