当前位置: 首页> 最新文章列表> array_filter() 与 array_unique() 搭配去重有效元素

array_filter() 与 array_unique() 搭配去重有效元素

M66 2025-06-04

在PHP中,我们经常需要对数组进行去重或者过滤无效元素。为了完成这些任务,PHP提供了许多内置函数,其中 array_filter()array_unique() 是两个非常常用的函数。今天我们将探讨如何将这两个函数结合起来,去重数组中的有效元素。

什么是 array_filter()array_unique()

  • array_filter():这个函数用来过滤数组中的元素。它会遍历数组中的每一个元素,并根据给定的回调函数(callback)决定是否保留这个元素。如果回调函数返回 true,该元素会被保留;否则,它会被丢弃。

  • array_unique():这个函数用来去除数组中重复的元素。它会检查数组中的元素,并删除所有重复的值,仅保留首次出现的元素。

结合 array_filter()array_unique() 进行去重

在某些情况下,我们可能需要先过滤掉无效或不需要的元素,再对数组进行去重。为了实现这一功能,我们可以将 array_filter()array_unique() 结合起来使用。

代码示例:

假设我们有一个包含字符串和数字的数组,我们想要先过滤掉空值和无效值,然后去重有效元素。

<?php
// 原始数组,包含空值、重复元素和无效值
$array = [1, 2, 3, '', null, 4, 4, 'apple', '', 'banana', 'apple', 'm66.net', 'apple'];

// 使用 array_filter() 过滤掉无效的元素
$filteredArray = array_filter($array, function($value) {
    // 过滤掉空值、null和其他无效值
    return !empty($value);
});

// 使用 array_unique() 去除重复的有效元素
$uniqueArray = array_unique($filteredArray);

// 输出结果
print_r($uniqueArray);
?>

代码解析:

  1. array_filter():我们使用回调函数 function($value) 来过滤数组。!empty($value) 确保我们只保留非空和非 null 的元素。empty() 会认为空字符串、0null 和其他空值为无效元素,因此它会过滤掉这些元素。

  2. array_unique():对过滤后的数组进行去重,只保留每个元素第一次出现的值。

运行结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [5] => 4
    [6] => apple
    [7] => banana
    [10] => m66.net
)

结合应用场景

假设我们在处理从某个 API (如 http://api.m66.net/data)获取的数据时,数组中可能会包含无效的数据项(如空字符串、重复元素等),而我们只希望得到有效且唯一的元素。这时,使用 array_filter()array_unique() 可以帮助我们快速清理数据。

例如,假设我们从 m66.net 的 API 接口获取了一个用户的购物车信息数组,这时我们可以通过以下代码来过滤掉无效项,并去重:

<?php
// 模拟从 API 获取的购物车数组
$cartItems = ['apple', '', 'banana', 'apple', 'm66.net', null, 'banana', 'm66.net', 'apple'];

// 过滤掉无效项
$validItems = array_filter($cartItems, function($item) {
    return !empty($item);
});

// 去重
$uniqueItems = array_unique($validItems);

print_r($uniqueItems);
?>

最终结果会是去掉了空值、重复和无效项的购物车清单。

总结

通过将 array_filter()array_unique() 结合使用,我们可以灵活地过滤数组中的无效元素并去重。这两者的结合在实际开发中非常实用,尤其是在处理来自外部数据源(如 API)时,能够帮助我们确保数据的有效性和唯一性。