多次元配列をランダムに表示させる方法

このQ&Aのポイント
  • PHPの多次元配列をループさせてランダムに表示する方法を教えてください。
  • 現在、多次元配列をループさせて表示していますが、ランダムに表示させたいと思っています。
  • 試行錯誤しましたが、思うような結果が出せませんでした。良い方法があれば教えてください。
回答を見る
  • ベストアンサー

多次元配列を[キー:値]の形でランダム表示に

<?php $fruit = array( 'apple' => array('ふじ','ジョナゴールド'), 'orange' => array('みかん','バレンシア'), 'grape' => array('巨峰','マスカット') ); foreach ($fruit as $key => $value) { foreach ($value as $key2 => $value2) { echo '<p>' . $key . ' : ' . $value2 . '</p>' . "\n"; } } ?> 上記コードにて多次元配列をループさせて以下の様に表示させています。 apple : ふじ apple : ジョナゴールド orange : みかん orange : バレンシア grape : 巨峰 grape : マスカット これを下の様にシャッフルした形でランダムに表示させたいと思い、自分なりに試行錯誤してみたのですが、思うような結果を出す事が出来ずに悩んでいます。 何か良い方法がありましたらアドバイスを頂ければと思います。 よろしくお願い致します。 grape : 巨峰 apple : ふじ orange : みかん grape : マスカット orange : バレンシア apple : ジョナゴールド

noname#210746
noname#210746
  • PHP
  • 回答数1
  • ありがとう数1

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

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

単純に「配列に入れてからシャッフルする」のではダメですか? <?php $fruit = array( 'apple' => array('ふじ','ジョナゴールド'), 'orange' => array('みかん','バレンシア'), 'grape' => array('巨峰','マスカット') ); $output = array(); foreach ($fruit as $key => $value) { foreach ($value as $key2 => $value2) { $output[] = '<p>' . $key . ' : ' . $value2 . '</p>'; } } shuffle($output); print implode("\n", $output); ?> なお「ランダム」なのでたまたま同じカテゴリが続くことは避けられません(汗

noname#210746
質問者

お礼

一体どこをどうソートしたら良いのだろうとずっと悩んでいましたが、一度配列に入れてしまえば良かったのですね。 初歩的な事なのかもしれませんが、またひとつ学ぶ事ができて良かったです。 この度のご回答に感謝致します。 ありがとうございました!

関連するQ&A

  • 二次元配列の基礎の基礎

    二次元配列という概念を知って興味を持ち、 ちょっと自分でやってみたのですが、どうしてもうまくいきません。(T-T) php.netやgoogleであちこち2時間以上見てまわりましたが、 あまりに初歩的過ぎるのか、難しいものばかりで撃沈しました...。 お手数ですが、どうぞよろしくお願いいたします。 <?php $fruits[] = array("orange", "みかん"); $fruits[] = array("apple", "りんご"); $fruits[] = array("grape", "ぶどう"); print_r($fruits); // 出力結果 // Array ( [0] => Array ( [0] => orange [1] => みかん ) [1] => Array ( [0] => apple [1] => りんご ) [2] => Array ( [0] => grape [1] => ぶどう ) ) // 以下でぶどうと出したいのですが、Array[1]と表示されてしまいます。 echo "$fruits[2][1]"; ?>

    • 締切済み
    • PHP
  • 多次元配列で、foreachを使って、key値を

    多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。  $x = array();  $x[] = array(   "id" => 1,   "name" => "JavaScript",  );  $x[] = array(   "id" => 5,   "name" => "PHP",  );  $z = array();  foreach($x as $key => $value){   $z[$value["id"]] = $value;   }  print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、  $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array (  [id] => 1  [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?

    • ベストアンサー
    • PHP
  • 連想配列に追加ってできるン?

    $fruit = array("Apple" => "りんご", "Orange" => "みかん", "Grape" => "ぶどう"); これに"EVA" => "エヴァンゲリオンの略"を追加したいんだけど、色々やったけどわからン。 どうしたらできるン?

    • ベストアンサー
    • PHP
  • 配列に新しい値を加える

    配列に新しい値を加えようとしているのですが、どうもうまくいってくれません。array_push を使用してもうまくいかないのでどうしたものかと悩んでいます。 $fruits = "banana melon orange strawberry"; $fruits = explode (' ', $fruits); $fruits = array_push ($fruits, "apple"); print_r($fruits); とすると 5 が表示されます。一方3行目を消すと Array ( [0] => banana [1] => melon [2] => orange [3] => strawberry ) が表示されます。 配列に新しい値を加えるやり方をご存知の方おられましたらご教授くださるとうれしく思います。

    • ベストアンサー
    • PHP
  • 再帰の仕方

    現在配列の出力結果が↓なのですがこれを array(2) { [0]=> string(6) "orange" [1]=> array(2) { [0]=> string(6) "apple" [1]=> array(2) { [0]=> string(6) "banana" [1]=> array(2) { [0]=> string(10) "Strawberry" } } } } ↓こっちのように変えたい場合の処理がどうしてもできません。 array(2) { [0]=> string(6) "orange" [1]=> string(6) "apple" [2]=> string(6) "banana" [3]=> string(10) "Strawberry" } 今自分がやってる途中のものです↓ $fruit = array("orange", array("apple", array("banana", array("Strawberry")))); function first_array($fruit) { foreach($fruit as $key => $value) { if(! is_array($value) === true ) { echo $value; } else { first_array($value); } } } $new_array = first_array($fruit); echo で orangeapplebananaStrawberry と表示はされるのですが、 配列に入れる方法がわかりません。 普通にこの部分を ~ if(! is_array($value) === true ) { $array[] = $value; } ~ とすると上書きされてしまっているのかな? 一個しかデータが残ってないのです・・・。 ご教授ください。

    • ベストアンサー
    • PHP
  • 2次元の連想配列を検索できません。

    以下の2次元配列でstatusが2の配列(orange)だけを 返したいのですがPHPでどう組めば実現できるでしょうか? Array ( [orange] => Array ( [start_date] => 20041122 [status] => 2 ) [apple] => Array ( [start_date] => 20041123 [status] => 1 ) ) foreach()とかやってみているのですが、はまってます(T_T)

    • ベストアンサー
    • PHP
  • 配列のインデックスを入力した値と比較して出力する方法

    以下のようなことをしたいのですが、いい方法が思いつきません $input = " リンゴあめ "; //ユーザーが入力する情報で全角・半角スペース、ひらがな・かたかな混在もあり得る $test = array( 'ミカン ゼリー' => 'orange', 'ブドウ アイス' => 'grape', 'リンゴ アメ' => 'apple', ); $inputの入力値と$testa_arrayのインデックスキーそれぞれを、mb_convert_kana で全角カタカナ変換、ereg_replaceで全角・半角スペース空白削除を行った状態で比較して、 マッチしていれば配列の値を返すようにしたいのですが、php4の環境の関数しか使えません。 上の場合だとappleが出力できればいいのですが、いい方法があれば教えてください。

    • 締切済み
    • PHP
  • 配列のキーとvalueをテーブルに書き込めますか

    いつもお世話になっております。 下記方法で 配列のデータのみinsertすることができました。 foreach($b as $Key =>$Value){ $sql ="INSERT INTO temp_memo (stylecode) VALUES ('{$Value}')"; mysql_query($sql); } テーブルには key と stylecodeの二つのフィールドがあります。 上記の方法だと 下記 value のみのinsertです。 key stylecode 0   りんご 0   みかん 0   いちご key も同時に テーブルに書き込むことは 可能でしょうか。 いろいろ検索してみましたが 見つかりませんでした。 初心者です。 どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルソート方法

    以下のようなテキストを入力してソートしたいのですが、どのようにプログラムを書けばよいのでしょうか? <<入力>> Fruit Apple Vegetable Tomato Friut Orange Fruit Grape Fish Salmon Vegetable Carrot <<ソート>> Fruit : Apple Orange Grape Vegetable: Tomato Carrot Fish : Salmon ソートしたあと、グループ毎の処理をしたいと思っています。 入力は数千行で、グループ(Fruit, Vegetable...)の個数などは不明です。

    • ベストアンサー
    • Perl
  • forを使わずにforeach文のみでループを回す

    ○質問の主旨 先日、下記の質問をしました。 PHPのfor文とforeach文の使い方 http://okwave.jp/qa/q8812443.html この例では,for文とforeach文を使って、 ・果物の名前を4回繰り返す ・繰り返しの2回目と4回目は、"食べてください"という文字列を入れる というプログラムを実現しています。 今回は同じ出力をするにあたって、 繰り返しはforeachのみで実現したいと考えています。 どのように修正すればよろしいでしょうか? ご存知の方がいらっしゃいましたら、 ご教示を願います。 ○質問の補足 このようなプログラムにしたいと考えています。 $fruits = array("りんご", "ばなな", "ぶどう", "みかん"); foreach ($fruits as $value) { // 果物の名前を4回繰り返して2回目と3回目は"食べてください"を入れる if (($i == 1) || ($i == 3)) { echo "食べてください"; echo "<br/>"; }; echo $value; echo "<br/>"; } 完成イメージはこんな感じです。 (1回目のループ) りんご ばなな ぶどう みかん (2回目のループ) 食べてください りんご ばなな ぶどう みかん (3回目のループ) りんご ばなな ぶどう みかん (4回目のループ) 食べてください りんご ばなな ぶどう みかん ○前回のプログラム for($i = 0; $i < 4; $i++) { if (($i == 1) || ($i == 3)) { echo "食べてください"; echo "<br/>"; }; $fruits = array("りんご", "ばなな", "ぶどう", "みかん"); foreach ($fruits as $value) { echo $value; echo "<br/>"; } }

    • ベストアンサー
    • PHP

専門家に質問してみよう