PHP使用array_combine合并数组时如何忽略任意一方为null的对应项
双数组对应下标非空合并解决方案
你当前使用的array_combine()会直接将两个数组的所有元素按顺序组合为键值对,不会自动过滤任一值为null的条目,不符合要求。以下是两种可行的实现方案:
方案1:循环遍历(全PHP版本兼容)
// 读取参数时设置默认空数组,避免未传参数时报错 $names = $request->input('social_media_name', []); $usernames = $request->input('social_media_username', []); $newArray = []; // 取两个数组的最小长度作为遍历上限,避免下标越界 $maxIndex = min(count($names), count($usernames)); for ($i = 0; $i < $maxIndex; $i++) { // 仅当两个下标对应的值都不为null时保留 if (!is_null($names[$i]) && !is_null($usernames[$i])) { $newArray[$names[$i]] = $usernames[$i]; } }
方案2:函数式写法(适合PHP7.4及以上版本)
$names = $request->input('social_media_name', []); $usernames = $request->input('social_media_username', []); // 打包对应下标元素为二元组 $pairs = array_map(null, $names, $usernames); // 过滤任意值为null的条目 $filteredPairs = array_filter($pairs, fn($pair) => !is_null($pair[0]) && !is_null($pair[1])); // 重组为键值对数组 $newArray = array_column($filteredPairs, 1, 0);
如果你需要同时过滤空字符串等无效值,可以将判断条件中的
!is_null替换为!empty,注意empty会将0、'0'也判定为空,可按需调整判断逻辑。
两种方案最终输出效果完全符合你的规则,你给出的两个示例场景下,最终得到的结果都是:
[ "qwfd" => "qwef", "qw2e3" => "w2" ]
内容的提问来源于stack exchange,提问作者mafortis
相关产品推荐
相关产品推荐

