PHP中二维数组转一维遇array_reduce返回空值问题求解
解决PHP二维数组转一维数组的问题
针对你给出的二维数组:
$answers4 = [["1003"],["1002"],["1001"]];
使用array_reduce结合array_merge得到空值数组的问题,这里提供几种可靠的解决方案:
方案一:自定义回调的array_reduce
直接在回调函数中提取每个子数组的唯一元素:
$answers5 = array_reduce($answers4, function($carry, $item) { $carry[] = $item[0]; return $carry; }, []);
执行后$answers5即为["1003","1002","1001"]。
方案二:array_merge结合数组解包(PHP 5.6+)
利用PHP的数组解包特性,将二维数组的子数组直接作为array_merge的参数:
$answers5 = array_merge(...$answers4);
这种方式代码简洁,适合PHP版本5.6及以上的环境。
方案三:array_column提取固定列
由于每个子数组仅包含一个元素,可通过array_column提取所有子数组的第0列元素:
$answers5 = array_column($answers4, 0);
这是最简洁的实现方式,无需额外回调逻辑。
关于原代码问题的说明
按照你给出的示例数组,理论上array_reduce($answers4, 'array_merge', [])应该能得到正确结果。如果实际返回空值数组,大概率是你的真实数组中子元素并非预期的非空字符串,或是存在其他隐式的数据类型问题。上述三种方案均能规避这类潜在问题,更稳定地实现二维转一维的需求。
内容的提问来源于stack exchange,提问作者Jiří Kopřiva
相关产品推荐
相关产品推荐

