- ベストアンサー
配列から値を取得する方法
- 配列から特定の番号を選び、全ての配列に格納されているデータを表示する方法について質問します。
- 前回の質問では、特定の番号を選んで野菜の名前を表示する方法がわかりましたが、他の配列の要素を表示する方法がわかりません。
- テキストファイルに保存されている野菜の名前の番号を改行で区切って指定する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
前回のは多分これですね。 http://okwave.jp/qa/q8002889.html 前回の続きで書くならこうですね。 function convert_to_map(&$in) { $out = array(); foreach ($in as $value) { $out[$value['no']] = $value; } return $out; } $vegemap = convert_to_map($data); $vegenums = array_map(rtrim, file("vegenum.txt")); foreach ($vegenums as $num) { if (is_numeric($num) && array_key_exists($num, $vegemap)) { print $vegemap[$num]['name']."\n"; } } convert_to_map関数で$out[$value['no']]に$value['name']でなく、$valueを入れているのが違いです。 こうすると、$vegenumsで配列そのものが見えます。 あと、前回の#1さんの前の方の回答を別の書き方で書くとこんな感じです。 $vegenums = array_map(rtrim, file("vegenum.txt")); foreach ($vegenums as $no) { $veges = array_filter($data, function($x) use($no) {return $x['no'] == $no;}); array_walk($veges, function($x) {print $x['no'].":".$x['name']."\n";}); } array_filterでnoが所定のものだけ抽出してarray_walkの中身で表示しています。もし、noが重複するものがあったら両方表示します。 ちなみに、一番外枠のforeachもarray_walkで書けますし、$vegesも要りませんがそこまでやると読みにくいと思ったのでこの程度にしました。 参考までに: http://php.net/manual/ja/function.array-filter.php http://www.php.net/manual/ja/function.array-walk.php http://www.ibm.com/developerworks/jp/opensource/library/os-php-lambda/index.html
お礼
hanabutako様 すぐにスクリプトを作っていただいて、もう、なんとお礼を申し上げたらいいのやら 大変助かりました。本当にありがとうございます。 ぱぱっと、回答なさるところや、スクリプトの書き方がカッコイイですねー こんなスマートな書き方でできるのかと、目から鱗であります。 hanabutako様に弟子入りしたいぐらいです。ホームページやツイッターなどは されていますか?お近づきになりたいです。ホントに。 二度も救っていただいて本当に感謝しております。本当にありがとうございました。 また、何かありましたらよろしくお願いいたします。