こんなPHPコードを書く奴は今すぐ懺悔しろ その1

たまにイラッとすると突発的にこのシリーズ書いていこうかと思います。
PHPコードでたまに「ありえない」コードを書く人が多いので・・・懺悔させるためによりよいコードを書いてもらうためのものですよ。

配列型かそうじゃないかで処理を分けすぎ

たまにDBとか何らかのデータを受け取ったときに1件かそうじゃないかでデータの形が変わっちゃうから処理分岐してるのありますよね。
例えばこんな感じ。

まずはデータ形式がこんな感じだとします。


//なんか処理をして、1件の場合は以下のような配列
$_data_array = array(
	"name" => "Bob おじさん",
	"favorite" => "台風の中心に行くこと"
);

//複数の場合はこんな形の配列を返すとします

$_data_array = array(
	array(
		"name" => "Bob おじさん",
		"favorite" => "台風の中心に行くこと"
	),array(
		"name" => "Jenkins おじさん",
		"favorite" => "毎日同じ事を飽きずにやること"
	)
);

こんな時にループ処理で各値を処理する時に配列の形が違うからこんな書き方してません・・・?

if(!isset($_data_array['name'])){
	foreach($_data_array as $_key => $_value){
		// $_value["key名"]で取れるので処理処理。
		// 処理
		// 処理
	}
}else{
	//$_data_array['key名']で取れるので処理処理。
	//処理
	//処理
}
//TODO 分岐させたが、処理が分散してる!

これは絶対ダメコードですよ・・・。なんせ処理が2重になってます。
絶対ダメ、読みにくい。

解決方法は?

スマートに書くとわかりにくいのでこれで。

if(isset($_data_array['name'])){
	//一旦配列をコピー
	$_data_array_tmp = $_data_array;
	//$_data_arrayを綺麗にする(unset()あってもいいと思います)
	$_data_array = array();
	//コピーした配列に添字をつけて戻す
	$_data_array[] = $_data_array_tmp;
}

これで全部同じ形式になるかと。
処理は全部同じになりますね、良かった良かった。