まずfor文は基本的にバグを埋め込む諸悪の根源なので、
どうしてもforかwhileに頼らなきゃならない理由があるんです!いくらでも罵ってください!馬鹿でごめんなさい!生まれてきてごめんなさい!!
…と毎回懺悔するくらいの気持ちで使いましょう。
ちなみに私がさくっと書いたコードは下記です。
PHP
1<?php
2$hoge = range(1, 10);
3$spaces = array_map(function($it){
4 return (int)round(abs($it - 5.5) - 0.5);
5}, $hoge);
6$patterns = array_map(function($it){
7 $seed = str_repeat("*", 5 - $it) . str_repeat(" ", $it);
8 return $seed . strrev($seed);
9}, $spaces);
bash
1$ php -a
2php > $hoge = range(1, 10);
3php > $spaces = array_map(function($it){
4php ( return (int)round(abs($it - 5.5) - 0.5);
5php ( }, $hoge);
6php > $patterns = array_map(function($it){
7php ( $seed = str_repeat("*", 5 - $it) . str_repeat(" ", $it);
8php ( return $seed . strrev($seed);
9php ( }, $spaces);
10php > var_dump($patterns);
11array(10) {
12 [0]=>
13 string(10) "* *"
14 [1]=>
15 string(10) "** **"
16 [2]=>
17 string(10) "*** ***"
18 [3]=>
19 string(10) "**** ****"
20 [4]=>
21 string(10) "**********"
22 [5]=>
23 string(10) "**********"
24 [6]=>
25 string(10) "**** ****"
26 [7]=>
27 string(10) "*** ***"
28 [8]=>
29 string(10) "** **"
30 [9]=>
31 string(10) "* *"
32}
ちょっと慣れないと読みづらいと思いますので、for文で書きなおしてみます。
PHP
1<?php
2$patterns = [];
3for ($i = 1; $i <= 10; $i++) {
4 $space_num = (int)round(abs($i - 5.5) - 0.5);
5 $seed = str_repeat("*", 5 - $space_num) . str_repeat(" ", $space_num);
6 $patterns[] = $seed . strrev($seed);
7}
bash
1php > $patterns = [];
2php > for ($i = 1; $i <= 10; $i++) {
3php { $space_num = (int)round(abs($i - 5.5) - 0.5);
4php { $seed = str_repeat("*", 5 - $space_num) . str_repeat(" ", $space_num);
5php { $patterns[] = $seed . strrev($seed);
6php { }
7php >
8php > var_dump($patterns);
9array(10) {
10 [0]=>
11 string(10) "* *"
12 [1]=>
13 string(10) "** **"
14 [2]=>
15 string(10) "*** ***"
16 [3]=>
17 string(10) "**** ****"
18 [4]=>
19 string(10) "**********"
20 [5]=>
21 string(10) "**********"
22 [6]=>
23 string(10) "**** ****"
24 [7]=>
25 string(10) "*** ***"
26 [8]=>
27 string(10) "** **"
28 [9]=>
29 string(10) "* *"
30}