FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

初心者エンジニア、phpマスターへの道 其の一 

こんにちは。新入社員の@tsumakkyです。
わが社では新入社員のことをBN(Brand-Newの頭をとって)と呼びます。
私たちも自分のことを社内で名乗るときは
「○○部BNの△△です!」などと言います。
なので『新入社員』って響き、なんかこっ恥ずかしい感じです(笑)


さて、先月、一ヶ月間、外部の会社でPHP研修を受けてきました。
そしてやっと、1週間前に帰ってきたのですが、
「次はJava覚えて」と言われ、ちょっと泣きそうになりました(笑)
現在Javaを使えるようになるべく奮闘中(…なはず)ですが
我が部で生きていくためにはPHPが必要ですし、まだまだPHPも勉強することだらけなので、
これからPHP+MySQLについて、学んだこと、疑問に思ったことなどなど
役に立たなそうで、もしかしたら役に立つかもしれない記事を書いていきます。
是非是非よろしくお願いします。

『文字の間に , を入れたい!』

文字列abcの間に 「,」 を入れるという課題がありました。

そのころの私はforくらいしか技を身につけておらず、
何とかforを使って書かねばなりませんでした。
居残りまでして考え付いたコードがこれ…

<?php

$a = "abc" ;
define("I", ",") ;
$b = "t" ;

/* $b[$c]:偶数 $b[$e]:奇数 $a[$d] */

for ( $c = 0 , $d = 0 , $e = 1 ; $c < 5 , $d < 3 , $e < 6 ; $c += 2 , $d ++ , $e += 2) {
$b[$c] = $abc[$d] ;
$b[$e] = I ;
}

echo $b ;

?>


でも、いつ見てもめんどくさいコードですね(笑)
まず、変数の置き方が悪いですね。
「$a」とかわかりにくいし、間違いそうです。
($bは適当な文字を代入しておかないと、定義してないよって怒られます…)
一番の問題は、for文の( )の中の条件式が長過ぎ、複雑過ぎですね。
あの頃はできればいいじゃん!と思っていました。
しかし、phpを学ぶにつれ、できるだけ簡潔に、そしてきれいに書くことが
本当に重要だと感じるようになりました。
長いコードになるほど、バグがあったとき、
こんなめんどくさいコードだと探すのが大変ですから…
さらに、このコードだとechoで表示したとき

a,b,c,

になるんです(間に入れたいだけだから、最後にも付くのは気分のいいもんじゃないです)。
まぁ、for文だとしょうがないですね…

しかし、かといってこの問題を解決するのにどんな技を使えばいいんだ?
やり直しに取り掛かったのは研修も終盤でしたが、使えそうな技なんて習ってないような…
そんなときはgoogle 先生ですね!
調べてみると、implodeなるものが!!!

implode

f:id:k_chindamaikul:20150722152127g:plain

解説 すべての配列要素の順序を変えずに、各要素間に glue 文字列をはさんで 1 つの文字列にして返します。
書式 string implode ( string $glue , array $pieces)

string implode ( array $pieces )

今となっては、どうしてこれと出会えたのか思い出せないのですが、
これと出会ったときは鳥肌が立つくらいの衝撃でした(笑)
すると、サクサク筆が進むものですね!
こんなへっぽこ初心者の私でも、ものの5分かかるか?位でできあがりました 。
それがこちら↓

<?php

$abc = "abc";

$num = strlen($abc);
$arr = array();

for($sub = 0; $sub < $num; $sub ++){
    $arr[$sub] = $abc[$sub];
}

echo implode(",", $arr);

?>


for文の条件式も、そして全体もすっきりしました! ミソとしては$arrの初期化し、文字列"abc"を配列として代入することです。まぁ、もっとスッキリするような、もっと簡単な方法があるような気がしますが。今の自分のレベルではここらが限界ですね…今後もっと簡単に書けるような関数に出会ったらこちらの記事、また更新したいと思います 。

☆心掛けること
・変数名をわかりやすく
・コードはスッキリと
・ 配列の初期化

…でも、implodeってそんなに使う機会あるのかな?