こんにちは。
以下のような多次元の配列があるとして…
$test["aa"]["name"] = "名前1";
$test["aa"][mail] = "メール1";
$test["bb"]["name"] = "名前2";
$test["bb"][mail] = "メール2";
$test["cc"]["name"] = "名前3";
$test["cc"][mail] = "メール3";
$test["dd"]["name"] = "名前4";
$test["dd"][mail] = "メール4";
foreach($test as $key => $val){
echo $key;
echo $test[$key]["name"];
echo $test[$key]["mail"];
}
とすると、1番目のキー・名前・メールアドレスのセットが4つ出力されてしまいますが、これに最大出力限度数を指定し、2などに制限したいです。
foreachでループ回数上限を指定する事は可能でしょうか?
また、他にも上記のような処理が可能な方法があれば教えて下さい。
No.4
- 回答日時:
> foreach($test as $key => $val){
> echo $key;
> echo $test[$key]["name"];
> echo $test[$key]["mail"];
> }
上記を下記に変更するだけでも良いかと・・
$keyArray = array_rand($test,2);//2に制限の例
foreach($keyArray as $key){
echo $key;
echo $test[$key]["name"];
echo $test[$key]["mail"];
}
お返事ありがとうございます。
array_rand、使用したことがなかったのですが、試してみた所、大変便利な関数ですね。
新しい知識をありがとうございます。
No.3
- 回答日時:
ANo.1で回答した者です。
お礼メッセージをありがとうございます。ランダムに取り出したいということですので、下記のようになります。
$test["aa"]~["dd"]のキーを別の配列$tmp[]にコピーして、そしてシャッフルします。シャッフルした結果から2つ取り出すようにしています。
--------------------------------
<?php
$test["aa"]["name"] = "名前1";
$test["aa"]["mail"] = "メール1";
$test["bb"]["name"] = "名前2";
$test["bb"]["mail"] = "メール2";
$test["cc"]["name"] = "名前3";
$test["cc"]["mail"] = "メール3";
$test["dd"]["name"] = "名前4";
$test["dd"]["mail"] = "メール4";
$tmp = array(); //シャッフル用の配列
$i = 0;
foreach($test as $key=>$val) {
$tmp[$i] = $key;
$i++;
}
shuffle($tmp);//配列をシャッフル
for ($i = 0; $i < 2; $i++) {
$key = $tmp[$i];
echo $key;
echo $test[$key]["name"];
echo $test[$key]["mail"];
}
?>
お返事ありがとうございます。
お礼が遅くなってすみません、上記コードを参考に自分なり試してみた所、実行出来ました。
今回は#2に記載した方法で解決しましたが、新しい知識が増えました。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
foreach自身が、『すべて』繰り返しですから、単体では無理ですね。
やるとすれば、カウンタ変数を別に用意してbreak;でループを中断ですかね。
$i=0;
foreach($test as $key => $val){
if (1<$i){//実際には($i=2)でも可
break;
}
$i++;
やりたい処理
}
関係ないけど気になったこと。
echo $test[$key]["name"];
echo $test[$key]["mail"];
普通はこうですね
echo $val["name"];
echo $val["mail"];
お礼が遅くなってすみません。
お返事と指摘ありがとうございます。
間違って覚えていたようです…。
ランダムはDBから取得時にDBにやらせる形で解決し、breakを使う方法を試してみた所、思った通りの動作をしました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- Java java final 1 2022/06/10 22:49
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- Visual Basic(VBA) シフト表のコマで「ブロック」されている前の時間の「出」を同一列の「休」と入れ替えたいがふぇきません。 2 2023/08/02 18:49
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
連想配列のキー値(連番)を基...
-
Excel VBAでフィルター後の対象...
-
PHP、{}記号の意味
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
関数をの引数について。
-
リストボックス複数選択抽出方法
-
foreachとかの勝手な省略?
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
PHPで多次元配列を一度に処理す...
-
phpの関数について質問です!
-
While文を使って配列の中身を全...
-
配列データのMySQLへの登録
-
phpのin_array()でわからない事...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マッチング処理(1:N)
-
smartyのforeachの使い方
-
foreachで上限回数指定方法また...
-
多次元配列を、1次元の配列にす...
-
foreachの間にテーブルの<TR>を...
-
PHP、{}記号の意味
-
$_POST受信で必要項目のみを結...
-
3つの連想配列を交互に代入し...
-
VB.NET で 二次元のハッシュは...
-
PHP:ツリー構造をulとli要素に...
-
foreachで配列を、左から縦3列...
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
添え字が全て文字列のPHPの多次...
-
POSTで渡されるデータの数がわ...
-
テーブルデータ表示
-
Smartyでインクリメント
-
PHPで変数名にハイフンを使うに...
-
Delphi XEの警告文を消したい
-
配列から順位を算出したい
おすすめ情報