SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【php】配列の縦横入れ替え的な操作

問題

こういう配列から

$no        = array(1,        2,        3,        4,        5);
$name      = array('佐藤',   '加藤',   '高橋',   '伊藤',   '山田');
$todofuken = array('岐阜県', '愛知県', '三重県', '長野県', '富山県');

こういう風にデータを取りたいんだけど

こうするしかないの?

foreach ($no as $key => $value) {
	$no[$key];        //noが欲しい
	$name[$key];      //nameが欲しい
	$todofuken[$key]; //todofukenが欲しい
}

何かもっと簡単にかけてもいいと思うんだけど。

答え

array_map() を使うと、こういうことができる。

$a = array_map(null, $no, $name, $todofuken);
foreach ($a as $row) {
	$row[0]; //noが欲しい
	$row[1]; //nameが欲しい
	$row[2]; //todofukenが欲しい
}

例えば、こんなフォームを作ると

<input type="text" name="no[]" value="1">
<input type="text" name="name[]" value="佐藤">
<input type="text" name="todofuken[]" value="岐阜県">

<input type="text" name="no[]" value="2">
<input type="text" name="name[]" value="加藤">
<input type="text" name="todofuken[]" value="愛知県">
...
...

リクエストの配列はちょうどこういう形になってしまうが

$no        = array(1,        2,        3,        4,        5);
$name      = array('佐藤',   '加藤',   '高橋',   '伊藤',   '山田');
$todofuken = array('岐阜県', '愛知県', '三重県', '長野県', '富山県');

こうすると

$a = array_map(null, $no, $name, $todofuken);

こんなふうに foreachで使いやすい形になる。

$a = array(
    array(1, '佐藤', '岐阜県'),
    array(2, '加藤', '愛知県'),
    array(3, '高橋', '三重県'),
    array(4, '伊藤', '長野県'),
    array(5, '山田', '富山県')
);

array_map() のコールバック関数に null を指定したときの機能が、変だけとちょっとおもしろい。

関連するメモ

コメント