1,菱形
*
***
*****
*******
*********
*******
*****
***
*
示例
$n = 5;
for($i = 1;$i <= $n;$i++) {
for($k = 1;$k <= $n - $i;$k++) {
echo " ";
}
for($j = 1;$j <= ($i-1) * 2 + 1;$j++) {
echo "*";
}
echo "
";
}
for($i = $n - 1;$i >= 1;$i--) {
for($k = 1;$k <= $n - $i;$k++) {
echo " ";
}
for($j = 1;$j <= ($i-1) * 2 + 1;$j++) {
echo "*";
}
echo "
";
}
?>
2,空心菱形
*
* *
* *
* *
* *
* *
* *
* *
*
示例一
$n = 5;
for($i = 1;$i <= $n;$i++) {
for($k = 1;$k <= $n - $i;$k++) {
echo " ";
}
for($j = 1;$j <= ($i-1) * 2 + 1;$j++) {
if($i == 1){
echo "*";
}elseif($j == 1 or $j == ($i-1) * 2 + 1){
echo "*";
}else{
echo " ";
}
}
echo "
";
}
for($i = $n - 1;$i >= 1;$i--) {
for($k = 1;$k <= $n - $i;$k++) {
echo " ";
}
for($j = 1;$j <= ($i-1) * 2 + 1;$j++) {
if($i == 1){
echo "*";
}elseif($j == 1 or $j == ($i-1) * 2 + 1){
echo "*";
}else{
echo " ";
}
}
echo "
";
}
?>
示例二
// 打印空心菱形
$n = 8;
for($i = 1;$i <= 2 * $n-1;$i++) { // 外层for控制金字塔的层数
// 在打印*前先打印空格
if ($i <= $n) {
for($k = 1;$k <= $n + 1 - $i;$k++) {
echo " ";
}
// 能内层for控制每层*的个数
for($j = 1;$j <= 2 * $i-1;$j++) {
if ($i == 1) {
echo '*';
} else {
if ($j == 1 || $j == 2 * $i-1) {
echo '*';
} else {
echo ' ';
}
}
}
} else { // 问题出现在这个else里
for($k = 1;$k <= $i - $n + 1;$k++) { // 这里$k <= $i-$n 应该为$k<=$i-$n+1
echo ' ';
}
for($j = 1;$j <= 2 * (2 * $n - $i)-1;$j++) {
if ($i == 2 * $n-1) { // 你的这里少了一个等于号,所以$i变成了常数 $i = 17
echo '*';
} else {
if ($j == 1 || $j == 2 * (2 * $n - $i)-1) {
echo '*';
} else {
echo ' ';
}
}
}
}
echo '
';
}
?>
示例三
function print_diamond($line, $flag = '*', $space = ' ', $end = '
') {
$diamond = make_diamond_array($line);
$total = $line * 2 - 1;
for($i = 1; $i <= $total; $i++) {
for($j = 1; $j <= $total; $j++) {
if(!empty($diamond[$i][$j])) {
echo $flag;
}else{
echo $space;
}
}
echo $end;
}
}
function make_diamond_array($line) {
$line = intval($line);
$diamond = array();
for($i = 1; $i <= $line; $i++) {
$diamond[$i] = $diamond[$line * 2 - $i] = array(($line - $i + 1) => true, ($line + $i - 1) => true);
}
return $diamond;
}
print_diamond(6);
?>
示例四
// 打印空心菱形
$n = 6; // 共有 2*$n + 1 层
for($i = 1;$i <= 2 * $n + 1;$i++) { // 循环所有层
for($j = 1;$j <= 2 * $n + 1;$j++) { // 循环所有列,把菱形想成正方形
if ($i <= $n + 1) { // 上面$n+1层
if ($j == $n - $i + 2 || $j == $n + $i) { // 上面n+1层 前面那个*坐标为 $n-$i+2 后面那个为$n+$i
echo "*";
} else {
echo " ";
}
} else { // 下面$n层
if ($j == $i - $n || $j == 3 * $n - $i + 2) { // 下面层,前面那个*坐标为 $i-$n 后面为 3*$n-$i+2
echo "*";
} else {
echo " ";
}
}
}
echo '
';
}
?>
示例五
// 打印空心菱形
$n = 6; // 共有 2*$n + 1 层
for($i = 1;$i <= 2 * $n + 1;$i++) { // 循环所有层
for($j = 1;$j <= 2 * $n + 1;$j++) { // 循环所有列,把菱形想成正方形
if ($j == $n - $i + 2 || $j == $n + $i || $j == $i - $n || $j == 3 * $n - $i + 2) {
echo "*";
} else {
echo " ";
}
}
echo '
';
}
?>
示例六
function diamond($n=3){
if($n==1){ echo '*'; return; }
for($i=0,$rows=($n*2)-1; $i
if($i<=$rows/2){
$tmp = ($i*2)+1;
echo str_pad('',($rows-$tmp)/2,' ',STR_PAD_LEFT).str_pad(str_pad('',$tmp-2,' ',STR_PAD_BOTH),$tmp,'*',STR_PAD_BOTH)."\r\n";
}else{
$tmp = ($rows/2-($i-$rows/2+1))*2+1;
echo str_pad('',((($i*2)+1)-$rows)/2,' ',STR_PAD_LEFT).str_pad(str_pad('',$tmp-2,' ',STR_PAD_BOTH),$tmp,'*',STR_PAD_BOTH)."\r\n";
}
}
}
echo '
';diamond(5);
echo '
';?>