PHP如何将一维字符串数组的每个元素重复N次生成新数组
实现方案
你之前的写法问题在于str_repeat()的作用是将单个字符串拼接为更长的字符串,只会生成单个拼接后的元素,无法生成独立的数组元素,以下是两种稳定可用的实现方式:
1. 基础循环写法(兼容性最好)
直接在循环中逐次插入指定数量的元素,所有PHP版本都支持:
$chars = ["a", "b", "c"]; $repeatTimes = 3; $result = []; foreach ($chars as $char) { for ($i = 0; $i < $repeatTimes; $i++) { $result[] = $char; } }
2. 原生数组函数写法(代码更简洁)
配合array_fill()、array_map()、array_merge()三个原生函数实现,无需嵌套循环:
$chars = ["a", "b", "c"]; $repeatTimes = 3; // PHP 7.4及以上版本支持箭头函数 $duplicatedChars = array_merge(...array_map( fn($char) => array_fill(0, $repeatTimes, $char), $chars )); // 低版本PHP兼容写法 $duplicatedChars = array_merge(...array_map( function($char) use ($repeatTimes) { return array_fill(0, $repeatTimes, $char); }, $chars ));
代码逻辑说明:
array_fill(0, $repeatTimes, $char)会生成一个长度为$repeatTimes、所有元素都是$char的新数组array_map()遍历原数组的每个元素,生成对应的重复元素数组,得到二维数组结构:[["a","a","a"], ["b","b","b"], ["c","c","c"]]- 用
...展开运算符将二维数组的每一项作为参数传给array_merge(),合并为一维数组就得到最终结果
注意:不推荐用
str_repeat()配合str_split()的写法,该方法仅支持单字符元素的数组,遇到多字符元素会出现拆分错误,通用性差。
内容的提问来源于stack exchange,提问作者Christophvh
相关产品推荐
相关产品推荐

