2006/09/28

会社で楽しかった瞬間。

今日、ふと、ある人力検索はてなを見ていたら、こんなものを発見した。
PHPのコードを教えてください。…で、回答を見ていたが、すっきりしない。スマートって書いてあるのにだ。
せっかくなので、回答しようと思ったが、すでに締め切られていたので、自己満足で書いてみた。
問題文:

PHPのコードを教えてください。なるべくスマートな方法が良いです。表を数字1から100まで10行*10行作りたいと思っています。1~10までいったら次の行、11~20までいったら次の行というように作成したいとおもっています。

<?php
for($x=1;$x<=10;$x++){
    print 
"<TR>";
    for(
$i=1;$i<=10;$i++){
        print 
"<TD>$i</TD>";
    }
    print 
"</TR>";
}
?>


と書くと10行*10行の表は作れるのですが、1~10までのものが10行できてしまいます。これを1~100までの数字を10行*10行にどのようにすればよいでしょうか?

あ、ちなみに、中括弧一つ補っておいたw
で、出てきた回答がこれ。


<?php
$k
=1;
for(
$x=1;$x<=10;$x++){
    print 
"";
    for(
$i=1;$i<=10;$i++){
        print 
"$k";
        
$k++;
    }
    print 
"";
}
?>

もう一つ


<?php
$x 
1
for($i=1;$i<=10;$i++){
    print 
"<TR>";
    for(
$j=1;$j<=10;$j++){
        print 
"<TD>$x</TD>";
        
$x++;
    }
    print 
"</TR>";
}
?>

いや、なんか書きたくなるでしょ?というわけで、まず自分で作ったのがこれ。

<?php
$tds 
array_map(create_function('$td''return "<td>$td</td>";'), range(1100));
foreach (
array_chunk($tds10) as $td) {
    
printf("<tr>\n%s\n</tr>\n"implode(""$td));
}
?>

ちょっとすっきりしているね。array_mapとcreate_functionを使って行を作ってarray_chunkして列を10に抑えている。会社で似たコードを見たことがあって、試してみたかったのだ。で、ちゃんと動く。

で、同僚のSさんに聞いてみたところ、こんなコードが返ってきた。


php -r 'foreach (range(1,100) as $x) {if ($x%10 == 1) echo "<tr>"; echo "<td>$x</td>"; if (!($x%10)) echo "</tr>\n";}'

で、他の同僚のYさんに聞いてみたところ、こんなコードが返ってきた。


php -r 'foreach (range(0,9) as $x) { echo "<tr>"; foreach (range(0,9) as $y) echo "<td>".($x*10+$y+1)."</td>"; echo "</tr>\n"; }'

うーん、いいねー。しかし、ワンライナーですか。。というわけで、最初に私が考えたものもワンライナーで書いてみることにする。

php -r '$tds = array_map(create_function("\$x", "return \"<td>\$x</td>\";"), range(1, 100)); foreach (array_chunk($tds, 10) as $td) printf("<tr>%s</tr>\n",
implode("", $td));'

うーん。エスケープするところがイマイチ。。。

しかし、SさんやYさんのように、こんなことで、簡単なコードを書いて見せ合うことができる環境はなかなか楽しかったです!私の会社も悪くないなー。
他のPHPerな方だったら、どんな書き方するかなー。

PHPで1から100を表示…

PHPで1から100の数字を表示するコードをスマートに書くネタがGANCHIKU.comで紹介されていました。

他のPHPerな方だったら、どんな書き方するかなー。
(more…)

トラックバック by Shin x blog — 2006/09/29

[PHP] 1から100まで10行*10行の表…

http://www.ganchiku.com/2006/09/jinriki_hatena_php.html から。 面白そうだったので、考えてみました。 &#60 (more…)

トラックバック by t_komuraの日記 — 2006/09/30

[Perl]tableタグで1から100を表示…

問題文: PHPのコードを教えてください。なるべくスマートな方法が良いです。表を数字1から100まで10行*10行作りたいと思っています。1〜10までいったら次の行、 (more…)

トラックバック by Unknown::Programming — 2007/06/08

Leave a comment

Bloglines feedburner