
本文详解如何用纯 php 的嵌套 for 循环,动态生成指定的星号(*)替换文本模式——即在固定字符串数组中,逐轮用连续星号块(长度从 1 到 n)替换不同起始位置的元素,输出所有合法组合。
本文详解如何用纯 php 的嵌套 for 循环,动态生成指定的星号(*)替换文本模式——即在固定字符串数组中,逐轮用连续星号块(长度从 1 到 n)替换不同起始位置的元素,输出所有合法组合。
要实现题中所示的五层递进式星号模式(如 * two tree four five、* * tree four five 直至全星号行 * * * * *),核心在于理解其生成逻辑:
-
外层循环
$i控制星号块的长度(从1到count($temp)); -
内层循环
$j控制星号块在数组中的起始索引(从0到count($temp) - $i,确保不越界); - 每次迭代需复制原始数组,再用
array_splice()在位置$j处*替换$i+1个元素为$i+1个 `''`**。
以下是完整、可运行的 PHP 实现:
<?php
$temp = ["one", "two", "three", "four", "five"];
$arrayResult = [];
for ($i = 0; $i < count($temp); $i++) {
for ($j = 0; $j < count($temp) - $i; $j++) {
$tempArr = $temp; // ✅ 关键:每次必须重置为原始数组,避免累积修改
$stars = array_fill(0, $i + 1, '*'); // ✅ 生成含 $i+1 个 '*' 的数组(替代 JS 的 Array(n).fill('*'))
array_splice($tempArr, $j, $i + 1, $stars); // ✅ 替换:从索引 $j 开始,删 $i+1 个,插入 $stars
$arrayResult[] = $tempArr;
}
}
// 可视化输出(每行以空格连接)
foreach ($arrayResult as $row) {
echo implode(' ', $row) . "\n";
}
?>关键注意事项:
- ❌
array.slice()和Array.fill()是 JavaScript 语法,在 PHP 中不存在——须用$tempArr = $temp复制数组,用array_fill()构造星号数组; - ❌
array_splice()的第四个参数必须是数组(即使只替换一个'*',也要传['*']),不能传字符串; - ✅
array_splice()是原地修改,因此每次内层循环前都必须重新赋值$tempArr = $temp,否则上一轮修改会影响本轮; - ? 输出顺序严格对应题目:先输出所有单星号位置(5 行),再双星号(4 行),依此类推,共
5+4+3+2+1 = 15行。
该方案完全脱离 JavaScript 思维,立足 PHP 数组原生操作,结构清晰、逻辑严谨,适用于任意长度的输入数组(只需修改 $temp 即可扩展)。掌握 array_splice() 的替换语义与循环边界控制,是解决此类模式生成问题的核心能力。
立即学习“PHP免费学习笔记(深入)”;



















