プロが教えるわが家の防犯対策術!

こんにちは。
以下のような多次元の配列があるとして…
$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でループ回数上限を指定する事は可能でしょうか?
また、他にも上記のような処理が可能な方法があれば教えて下さい。

A 回答 (4件)

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"];
    • good
    • 0
この回答へのお礼

お礼が遅くなってすみません。
お返事と指摘ありがとうございます。
間違って覚えていたようです…。

ランダムはDBから取得時にDBにやらせる形で解決し、breakを使う方法を試してみた所、思った通りの動作をしました。
ありがとうございます。

お礼日時:2010/04/18 04:08

> 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"];
}
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
array_rand、使用したことがなかったのですが、試してみた所、大変便利な関数ですね。
新しい知識をありがとうございます。

お礼日時:2010/04/18 04:12

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"];
}
?>
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
お礼が遅くなってすみません、上記コードを参考に自分なり試してみた所、実行出来ました。
今回は#2に記載した方法で解決しましたが、新しい知識が増えました。
ありがとうございました。

お礼日時:2010/04/18 04:10

要求要件が分からないので教えて下さい。



ご質問のサンプルスクリプトですと、$test["aa"]~["dd"]の4つのうちから、ランダムに2つをとりだして表示したいと考えておられますか?
それとも、常に$test["aa"]~["bb"]の2つを表示したいと考えておられますか?
お知らせください。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
ランダムに取得したいと考えています。

お礼日時:2010/04/16 20:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!