如何在PHP多维数组中筛选出phone列非空的子数组?
最快高效过滤PHP多维数组的方法
嘿,要实现这个需求,用PHP内置的array_filter()函数就是最优解——毕竟内置函数是底层C实现的,比手动写循环高效得多,代码也更简洁。
实现代码
$array = [ 0 => [ "id" => 1, "name" => "Sammy", "phone" => "2348055643322", "email" => "sammy@abc.com" ], 1 => [ "id" => 2, "name" => "Saheed", "phone" => "", "email" => "saay@aol.com" ], 2 => [ "id" => 3, "name" => "Edwin", "phone" => "2348099993322", "email" => "eddy@gmail.com" ], 3 => [ "id" => 3, "name" => "Jonadab", "phone" => "2348066773322", "email" => "jonadab@gmail.com" ], 4 => [ "id" => 3, "name" => "Mercy", "phone" => "", "email" => "mercy@sysnet.com" ] ]; // 过滤出phone非空的子数组,保留原键 $filteredArray = array_filter($array, fn($item) => !empty($item['phone'])); print_r($filteredArray);
代码说明
array_filter()会自动遍历数组,只保留回调函数返回true的元素,默认会保留原数组的键名,正好匹配你想要的结果格式。- 这里用了PHP 7.4+支持的箭头函数
fn($item) => !empty($item['phone']),如果你的PHP版本低于7.4,可以换成普通匿名函数:$filteredArray = array_filter($array, function($item) { return !empty($item['phone']); }); !empty($item['phone'])会严格排除空字符串、null、0等“空值”,如果只是想排除空字符串,也可以直接写$item['phone'] !== '',根据你的实际需求调整。
输出结果
运行后得到的结果和你期望的完全一致:
Array ( [0] => Array ( [id] => 1 [name] => Sammy [phone] => 2348055643322 [email] => sammy@abc.com ) [2] => Array ( [id] => 3 [name] => Edwin [phone] => 2348099993322 [email] => eddy@gmail.com ) [3] => Array ( [id] => 3 [name] => Jonadab [phone] => 2348066773322 [email] => jonadab@gmail.com ) )
内容的提问来源于stack exchange,提问作者SaAy
相关产品推荐
相关产品推荐

