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