PHP 数组怎么过滤

在日常做网站或工具开发时,我们常会遇到一些“无效数据”——比如用户提交表单时填了空值,或是导入表格时多了重复内容,这些数据会影响后续的统计、展示,甚至导致程序报错。这时候,给数据“做减法”就成了关键,而PHP里的数组过滤,就是处理这类问题的实用方法。

先搞懂:我们要过滤什么?

很多新手刚接触数组过滤时,容易陷入“盲目删所有”的误区。其实日常开发中,最常见的过滤需求有三类:一是删掉空值(比如用户没填的输入项),二是去重(比如重复的订单号),三是按规则删特定内容(比如只留合法的手机号)。举个生活化的例子:你整理购物清单时,会把草稿纸里的空白项划掉,把重复的“买牛奶”只留一次,再把不符合预算的奢侈品划掉——这和PHP数组过滤的逻辑完全一致。

PHP 数组怎么过滤

最常用的“空值过滤”:array_filter()

处理空值是数组过滤里的高频需求,PHP自带的array_filter()函数就能轻松搞定。它的特点是:自动把数组里值为false的元素(包括空字符串""、0、null、[]空数组)删掉,只保留“有意义”的内容。

比如你做用户留言板,用户提交的数组是["我要写代码", "", "我喜欢PHP", null, 0],用array_filter()处理后,就会变成["我要写代码", "我喜欢PHP"],空白内容全没了。

如果想自定义过滤规则——比如只删空字符串,却保留数字0(有些场景0是合法值,比如用户评分0分),可以给函数加个“回调规则”。比如array_filter($list, function($val) { return $val !== ""; }),这样只有值为""的元素会被删掉,0会留下来。

去重:给数组“消重”的简单方法

如果数组里有重复内容,比如["苹果", "香蕉", "苹果", "橘子", "香蕉"],要变成只有唯一值的数组,用array_unique()就够了。这个函数会自动识别数组里相同的字符串或数字,只保留第一次出现的那个。

不过要注意:如果数组里有对象或者多维数组,array_unique()就不好用了——它只能处理一维数组。比如你有个存储用户信息的数组[["name"=>"小明"], ["name"=>"小红"], ["name"=>"小明"]],想去掉重复的小明,就得先把每个对象转成字符串,再去重,最后转回来,不过日常做简单列表去重时,array_unique()完全够用。

按规则过滤:精准删留想要的内容

如果需要更灵活的过滤,比如只留长度大于5的字符串,或者只留1开头的手机号,就得结合array_filter()和自定义规则。比如要过滤掉列表里长度不足5的水果名:

`php

$fruitList = ["苹果", "香蕉", "草莓", "西瓜", "梨"];

$filtered = array_filter($fruitList, function($item) {

// 用strlen()判断字符串长度,只留长度≥5的

return strlen($item) ≥ 5;

});

// 结果会是["香蕉", "草莓", "西瓜"],因为“苹果”“梨”太短

`

这个方法就像你整理书包时,按“能装下课本”的标准,只留下符合大小的文具,完全由你定规则。

最后要提醒:数组过滤不会修改原数组,只会返回新的过滤后的数组,不会影响原来的数据,这对新手来说很重要——要是改坏了原数据,再找回来就麻烦了。

上一篇 Java HashMap 怎么用