【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 を指定したときの機能が、変だけとちょっとおもしろい。