配列から値を取得する方法

このQ&Aのポイント
  • 配列から値を取得する方法について教えてください。
  • テキストファイルに保存された番号を使用して、野菜の名前を取得する方法を知りたいです。
  • 具体的な例として、番号22と484に対応する野菜の名前を取得したいです。
回答を見る
  • ベストアンサー

配列から値を取得する方法。

配列から野菜の名前を取得して表示する方法を教えてください。 取得したい野菜の名前の番号はひとつずつ改行で区切って テキストファイル(*.txt)に保存しています。 例↓ 22 484 Array ( [0] => Array ( [no] => 22 [name] => とまと ) [1] => Array ( [no] => 1508 [name] => かぼちゃ ) [2] => Array ( [no] => 5482 [name] => せろり ) [3] => Array ( [no] => 1813 [name] => にんじん ) [4] => Array ( [no] => 54118 [name] => ナス ) [5] => Array ( [no] => 484 [name] => レタス ) )

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

何かの課題臭いですが、人が書いたコードを見るのも良い勉強だと思いますのでちょっと書いてみます。 noをキーにして、nameを返す連想配列に変換してから探せば良いと思います。 $data = array ( 0 => array ( 'no' => 22, 'name' => 'とまと',), 1 => array ( 'no' => 1508, 'name' => 'かぼちゃ',), 2 => array ( 'no' => 5482, 'name' => 'せろり',), 3 => array ( 'no' => 1813, 'name' => 'にんじん',), 4 => array ( 'no' => 54118, 'name' => 'ナス',), 5 => array ( 'no' => 484, 'name' => 'レタス',),); function convert_to_map(&$in) { $out = array(); foreach ($in as $value) { $out[$value['no']] = $value['name']; } return $out; } $vegemap = convert_to_map($data); $vegenums = array_map(rtrim, file("vegenum.txt")); foreach ($vegenums as $num) { if (is_numeric($num)) { print "$vegemap[$num]\n"; } } ここで、vegenum.txtに野菜の名前の番号を入れてあるとします。

fukurou125
質問者

お礼

課題ではなくて、ただ趣味でPHPをスタートした者です^^; 大変助かりました。まさに理想のスクリプトでした。本当にありがとうございます。 また、PHPで質問させていただくかもしれませんが、そのときはどうぞよろしくお願いします。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

この配列だとforeachで頭から検索するしかないと思います。 <?php $file = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $array = array( array('no'=>22, 'name'=>'とまと'), array('no'=>1508, 'name'=>'かぼちゃ'), array('no'=>5482, 'name'=>'せろり'), array('no'=>1813, 'name'=>'にんじん'), array('no'=>54118, 'name'=>'ナス'), array('no'=>484, 'name'=>'レタス'), ); foreach ($file as $val) { foreach ($array as $item) { if ($item['no'] !== intval($val)) { continue; } print $val . ":" . $item['name'] . "<br />"; break; } } 配列が下記のようになっていれば(あるいはこの配列をあらかじめ別に作成するようにすれば)もう少し楽に処理出来ます。 <?php $file = file('data.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $array = array( 22=>'とまと', 1508=>'かぼちゃ', 5482=>'せろり', 1813=>'にんじん', 54116=>'ナス', 484=>'レタス' ); foreach ($file as $val) { if (array_key_exists($val, $array)) { print $val . $array[$val] . "<br />"; } }

fukurou125
質問者

お礼

ご回答いただいてありがとうございます。 二つもサンプルを作っていただいて、いろいろな方法があるんですね~勉強になりました。PHP初心者ですが、とても分かりやすい説明で助かりました。本当にありがとうございます。

関連するQ&A

  • 前回の続き、配列から値を取得する方法。

    数日前にこちらで配列から値を取得する方法について質問させていただいた者です。 hanabutako様とshimix様にご回答いただきまして、無事問題解決することができました。 その際、hanabutako様のスクリプトを利用させていただいたのですが、 今回もその件について質問があります。 また、ご教授いただけますでしょうか。よろしくお願いいたします。 前回の質問↓ http://okwave.jp/qa/q8004813.html 以下のような配列の形で野菜の種類が50個以上あるとします。 その中から、特定の番号を選んで、その”全ての配列に格納されているデータ”を表示したいです。 前回は、特定の番号を選んで、その野菜の名前を表示するところまでは分かりましたが。 野菜の名前以外の配列はどのようにforeachに追記するかわかりませんでしたorz みなさん、よろしくお願いいたします。 取得したい野菜の名前の番号はひとつずつ改行で区切って テキストファイル(*.txt)に保存しています。 例↓ 1 7 36 45 50 array(50) {[0]=> array(4) { ["color"]=> string(6) "orange" ["name"]=> string(63) "とても発育がよいかぼちゃ。色はオレンジカラー " ["no"]=> string(7) "6587145" ["note"]=> string(17) "4月頃に種をまいた" } [2]=> array(4) ... [3]=> array(4) ... ~ [50]=> array(4) ... というように、0から50まであります。

    • ベストアンサー
    • PHP
  • xmlから配列で取得したものを取り出したい

    as3初心者jpncan15といいます。 xmlから配列で取得したものをfunction外で取り出したいのですがどのようにすればいいのか悩んでいます。functionを調べたり配列を調べたり頭がかなり混乱中です。 お手数ですがご教授いただけますでしょうか? var ary:Array=new Array(); var ary_name:Array=new Array(); var loader:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest("b.xml"); var xml:XML; loader.load(request); loader.addEventListener(Event.COMPLETE , XMLload); function XMLload(e:Event):void { xml = XML(e.target.data); num_txt.text = xml.item.length(); //xml件数をテキストフィールドへ入れる for each(var element:Object in xml.item.thumb) //配列に入れる {ary.push(element);} for each(var element_name:Object in xml.item.name) //配列に入れる {ary_name.push(element_name); trace(element_name);}//出力OK } //function外で配列を使用したい trace(ary[5]); trace(ary_name[2]);

    • ベストアンサー
    • Flash
  • 配列にある文字列を1つの変数に改行付きで格納する方法

    配列にある文字列を1つの変数に改行付きで格納する方法 Array ( [0] => レタス [1] => トマト [2] => きゅうり ) などの配列を $yasai 変数へ ------ レタス トマト きゅうり ------ と格納してテキスト表示させたいのですが、どのようにすれば可能でしょうか? そもそも可能なのでしょうか?ご存知の方、いらっしゃいましたら宜しくお願いします。

    • ベストアンサー
    • PHP
  • JSP内での配列の値取得方法。

    こんにちは。 -------- (略) <SCRIPT LANGUAGE="JavaScript" > function NextPage(no){ with( document.frm1 ) { hidNO.value = no; hidPlanId.value = 「ここに配列から取得した値を表示したい」; action = "Next.jsp"; submit(); } (略) <FORM name="frm1"> <% for(int i=0; i<(DBより取得した配列).length; i++) { ROW(HashMap継承の配列クラス) row = rows[i]; %> <INPUT TYPE="hidden" ID="hidKey" NAME="hidKey" VALUE="<%= i番目の値(1)%>" > <INPUT TYPE="hidden" ID="hidKey" NAME="hidKey" VALUE="<%= i番目の値(2)%>" > <TD><INPUT TYPE="button" NAME="btnDet<%= i %>" VALUE="詳細表示" onClick="NextPage('<%= i %>');" > </TD> <% } %> </FORM> ******* 上記のhidkeyのvalue値をJavaScript内でi番目の値を 取得するにはどのように記載したらよいのでしょうか・・・。 他のクラス等を使っているため、うまくコードが表現 できていないかもしれませんが、 もしこれでわかった方、ぜひ教えてください。

    • ベストアンサー
    • Java
  • 連想配列と別配列とのマッチング

    以下の連想配列と別にあるテキストファイルを配列にして ”マッチした商品名の全てのデータを表示したいです。 ■連想配列の形↓■ 50を超えるリンゴの種類が、以下のような 連想配列($alldata)の形であります。 $alldata = [1]=> array(5) { ["no"]=> string(1) "1" ["name"]=> string(5) "san-tugaru" ["color"]=> string(3) "red" ["price"]=> string(3) "150" ["memo"]=> string(10) "aomori" } [2]=> array(5) { ["no"]=> string(1) "2" ["name"]=> string(5) "ko-gyoku" ["color"]=> string(3) "red" ["price"]=> string(3) "250" ["memo"]=> string(10) "yamagata" } というふうに50個のリンゴのデータ続きます。 リンゴの配列情報の詳細は以下の通りです。 ※配列のKeyの番号とvalueの商品Noは同じで連想配列にしています。 商品No ["no"] 名称  ["name"] 色   ["color"] 価格  ["price"] 産地  ["memo"] +-------------------------------------------------+ ■テキストファイル(select-ringo.txt)の内容と意味■ このテキストファイルは、商品No「4、5、12、30」の リンゴを選んで表示したい場合です。 +----+ 4,1,10 5,4,13 12,2,9 30,3,15 +----+ ◇カンマで区切られた数字の意味◇ ・各行の先頭の数字は「商品No.」を選択します。 ・カンマで区切られた2番目の数字は、”色”を選択します。 たとえば、1行目であれば、 商品No 4 の全ての情報は カラー1=#ff0000 echo表示されます。 他の番号の場合は色は以下の通りです。 カラー1 =#ff0000 カラー2 =#ff6600 カラー3 =#ff0066 カラー4 =#ff3399 ・3番目の数字はフォントサイズ(px)を意味します。 +---------------------------------------------------+ テキストファイルに”商品番号のみ”を入れると以下のスクリプトで動作しますが、 カンマで区切った場合のマッチング方法に悩んでいます。 ※以前、こちらで親切な方に方法を教えていただきました↓ $selectNo = array_map(rtrim, file("select-ringo.txt")); foreach ($selectNo as $num) { if (is_numeric($num) && array_key_exists($num, $alldata)) { 表示 } } みなさん、お力をお貸しください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列の変更

    上のような配列を、下の配列にしたいのですが、どうすれば良いでしょうか? Array (   [0] => 2   [id] => 2   [1] => 名前   [name] => 名前   [2] => タイトル   [title] => タイトル )   ↓ Array (   [id] => 2   [name] => 名前   [title] => タイトル ) また、上の配列は、何と言うのでしょうか? 連想配列?

    • ベストアンサー
    • PHP
  • PDO/カラム値だけを取得したい(配列ではなく)

    PDOで、配列形式ではなく、変数だけを取得したいのですが、 どうすればいいでしょうか? ・取得結果の配列から値を取り出すのではなく、PDOでの取得段階で変数だけを取得したい ・結果は1件しかないという前提 <例> userテーブルで、指定条件(=email)に合致するnameカラム $sql = "SELECT name FROM user WHERE email = :email"; このとき、  Array ( [name] => 伊藤 ) ではなく、  伊藤 だけを取得したいです

    • ベストアンサー
    • PHP
  • 多次元配列の入れ替え

    いつもお世話になります。 PHPで多次元配列の入れ替えについて悩んでおります。 以下のようなデフォルトの配列から、整形後の配列 へ変換したいのですが、どのように扱ってよいか 頭が回らず困っています。 2次元目のクラスが等しいもののidをキーとして、 名前を値としたいのですが。。。 どうぞ宜しくお願いします(>へ<) //デフォルトの配列 Array (   [0] => Array     (       [id] => 1       [class] => A       [name] => 佐藤     )   [1] => Array     (       [id] => 2       [class] => A       [name] => 山下     )   [2] => Array     (       [id] => 3       [class] => B       [name] => 田中     )   [3] => Array     (       [id] => 4       [class] => B       [name] => 高橋     ) ) //整形後の配列 Array (   [A] => Array     (       [1] => 佐藤       [2] => 山下     )        [B] => Array     (       [3] => 田中       [4] => 高橋     )      )

    • ベストアンサー
    • PHP
  • この配列は何形式と呼びますか

    PHPにて以下のような配列を処理しようとしています。 a:2:{s:4:"name";s:10:"名前が入る";s:4:"text";s:1226:"ここは説明文が入る";} まず、この配列は何形式と呼ばれるものでしょうか? 次に、配列に入れ直したいのですが、簡単に変換できる関数なんてありますでしょうか? 具体的にはこんな感じの配列へ変換できれば と思っています。↓↓ $array['name'] = "名前が入る"; $array['text'] = "ここは説明文が入る"; ---------------------------------------- a:2:{  s:4:"name";  s:10:"名前が入る";  s:4:"text";  s:1226:"ここは説明文が入る"; } たぶん、 a:2 が2つの組があるよって意味で s:4 がサイズを表しているんじゃないかと思うのですが…。 どなたかお助けください。

    • ベストアンサー
    • PHP
  • ◆配列をログへ

    いつもお世話になります。 以下のような多重配列を一度ログへ保管し、その後また取り出したいです(DBは使えません)。 配列のままでは保管できないので、変数にし保管、それを取り出して配列に再加工するという方法をとっています。 ( [0] => Array ( [0] => Array ( [name] => 太郎 [age] => 20 [tel] => 123123123 [mail] => tarou.com ) [1] => Array ( [name] => 花子 [age] => 18 [tel] => 3334444555 [mail] => hana.com ) ) ) //上の配列を変数にしてログとして保管 @@太郎++20**123123123^^tarou.com @@花子++18**3334444555^^hana.com //再度ログを取得し元の配列に再加工。 explode関数などで区切り文字(@@や++)を元に考えてみたのですが、 もっとスマートな方法があるのかなと思いまして、投稿してみました。 ログというのは一度テキストファイルとして保管という意味です。

    • ベストアンサー
    • PHP