PHP如何根据表单问题数量动态调用array_merge合并多个数组
可行解决思路
你之前的写法问题在于错误地用字符串拼接的方式生成array_merge的参数,PHP不支持直接把拼接的字符串表达式当函数参数执行。你只需要先把所有待合并的q系列数组收集到一个容器数组中,再动态传入array_merge即可。
方法1:基于你已有的$tmp计数实现(适配PHP 5.6及以上版本)
// 收集所有待合并的q系列数组 $toMerge = []; for ($k = 1; $k <= $tmp; $k++) { // 加入存在性判断,避免下标不存在时报错 if (isset($data["q{$k}"]) && is_array($data["q{$k}"])) { $toMerge[] = $data["q{$k}"]; } } // 使用展开运算符把容器数组拆分为多个参数传入array_merge $results = array_merge(...$toMerge);
方法2:低PHP版本兼容方案
如果你的运行环境PHP版本低于5.6,不支持展开运算符,可以用call_user_func_array实现动态传参:
// 前面收集$toMerge的代码和方法1一致 $results = call_user_func_array('array_merge', $toMerge);
方法3:无需提前统计$tmp的简化方案
你可以直接遍历$data匹配q开头+数字的键名,避免计数错误导致漏合并/多合并:
$toMerge = []; foreach ($data as $key => $value) { // 正则匹配q+纯数字的键名 if (preg_match('/^q\d+$/', $key) && is_array($value)) { $toMerge[] = $value; } } $results = array_merge(...$toMerge);
内容的提问来源于stack exchange,提问作者0liv3er
相关产品推荐
相关产品推荐

