preg_grep用于正则筛选数组元素并保留键值关系,其语法为preg_grep($pattern, $input, $flags),支持正向与反向匹配。例如筛选Gmail邮箱时保留原键名,或使用PREG_GREP_INVERT排除匹配项,亦可过滤数字字符串等,适用于需精准控制数据结构的场景。

在PHP中,preg_grep 函数用于使用正则表达式筛选数组中的元素。它能根据匹配规则过滤出符合条件的值,并且保留原始数组的键值对应关系,非常适合需要精准控制数据结构的场景。
函数语法如下:
preg_grep($pattern, $input, $flags = 0)
/^abc/
PREG_GREP_INVERT 表示反向匹配(返回不匹配的元素)返回一个新的数组,包含匹配(或不匹配)的元素,同时保持原有的键名。
假设有一个用户邮箱列表,我们想筛选出所有 Gmail 邮箱:
立即学习“PHP免费学习笔记(深入)”;
$emails = [
'user1' => 'alice@gmail.com',
'user2' => 'bob@yahoo.com',
'user3' => 'carol@gmail.com',
'user4' => 'dave@outlook.com'
];
$gmails = preg_grep('/@gmail\.com$/', $emails);
// 输出结果
print_r($gmails);
输出为:
Array
(
[user1] => alice@gmail.com
[user3] => carol@gmail.com
)
可以看到,匹配成功的元素不仅保留了值,还完整保留了原始的键名,这在处理关联数组时非常有用。
如果想获取非 Gmail 的邮箱,可以使用 PREG_GREP_INVERT:
$not_gmail = preg_grep('/@gmail\.com$/', $emails, PREG_GREP_INVERT);
结果将包含 yahoo 和 outlook 邮箱,同样保留原有键名。
也可以用于索引数组,比如筛选出所有整数:
$mixed = [1, '2', '3.5', 'hello', 4, '5'];
$integers = preg_grep('/^\d+$/', $mixed);
print_r($integers);
输出:
Array
(
[0] => 1
[1] => 2
[4] => 4
[5] => 5
)
注意:虽然值是数字字符串,但通过正则判断是否只含数字,也能有效过滤。
基本上就这些。preg_grep 在需要正则过滤数组又不想打乱键值关系时非常实用,写起来简洁,逻辑清晰。
以上就是php中preg_grep筛选匹配数组元素_php正则过滤数组值与保留键值对应方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号