• ベストアンサー

foreach文について

ham_kamoの回答

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

こういう方法はいかがでしょうか。 ループの中で配列変数(ここでは$found)の連想配列のキーとして$test["URL"]を使用し、配列にダミー値をセットします。 連想配列に指定したキーがあるかどうかを array_key_exists() で調べ、ない場合に「はじめて出てきた」と判断して hs($test["URL"])を出力し、$test["URL"]をキーとしてセットします。 <html> <body> <? $testlist = gettestList($type); unset($found); $found[0]=1; //$foundを配列変数と定義するためのダミー行 foreach ($testlist as $test) { ?> ・ <? if (!array_key_exists($test["URL"],$found)) { print hs($test["URL"]); $found[$test["URL"]] = 1; } ?> ・ <? } ?> <body> <html>

shinmaiphp
質問者

お礼

無事解決いたしました。 貴重な参考意見感謝いたします。 ホントにどうもありがとうございました。

shinmaiphp
質問者

補足

非常にスマートな方法をありがとうございます。 この方法の場合、同じ値がをもつ要素が複数あるとき 最初に同じ値を持つ要素のみ、表示しないでくれますが、 次からまた複数表示されてしまいます。 例>​ http://oshiete1.goo.ne.jp/http://oshiete1.goo.ne.jp/http://hogehoge.com/http://gehogeho.com/http://gehogeho.com/​ 表示される内容 http://oshiete1.goo.ne.jp/http://hogehoge.com/http://gehogeho.com/http://gehogeho.com/​ 有効な方法をご教授いただいたにもかかわらず、 度々恐れ入りますが、 複数の値を持つ要素が複数あっても重複表示を防ぐ方法ありますでしょうか?

関連するQ&A

  • foreachで回った数を表示したい

    単純な質問ですみません。 ==== //getTestlistは別ファイルで定義済み。 <? $testlist=getTestlist(); foreach($testlist as $test){ ?> ・ ・ <? } ?> ==== 例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。 そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか? 表示したい位置は<? } ?>の外側にと考えています。 あさってな質問でしたらすみません。 phpVer 4.3 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • foreach文の中での条件分岐

    ハンドルネームのとうり、php初級者です。 素朴な質問をさせてください。 変数"$test"があります。これをあるwebページにて、指定した要素が存在する数だけ回して表示しています。 <? $testlist = getTestList(); foreach ($testlist as $test) { ?> <a name="<?= date_format("Ymd",$test["テスト日付"]) ?>"></a> <table> <tr> <div>【 <?= hs($test["テスト題名"]) ?> 】</div> </tr> <tr> <div align="left"><?= disp($test["テスト本文"]) ?></div><br /> </tr> </table> <? } ?> これをdate_format("Ymd",$test["テスト日付"])の月(Ym)が同じものだけを表示したいのですが、方法がわかりません。 (希望する動きの例) 下記3つのデータがあるとします。 ~データ1~ テスト日付:20070504 テスト題名:テスト1 テスト本文:テスト本文1 ~データ2~ テスト日付:20070321 テスト題名:テスト2 テスト本文:テスト本文2 ~データ3~ テスト日付:20070517 テスト題名:テスト3 テスト本文:テスト本文3 ※date_format("Ymd",$test["テスト日付"])が20070504だった時 テスト日付:20070504 テスト題名:テスト1 テスト本文:テスト本文1 テスト日付:20070517 テスト題名:テスト3 テスト本文:テスト本文3 ※date_format("Ymd",$test["テスト日付"])が20070321だった時 テスト日付:20070321 テスト題名:テスト2 テスト本文:テスト本文2 こんな感じです。 どなたかお分かりになられましたらご教授ください。お願いいたします。

    • ベストアンサー
    • PHP
  • foreach文の使い方を教えて下さい

    foreach文を使って表示させる時に、通し番号も一緒につけたいのですが方法がわかりません。 $msgをaaa,bbb,ccc,ddd,eeeとした時、 $msg_array = explode(",", $msg);//カンマ区切りでばらす foreach($msg_array as $message){ $comment = "コメント★【" .$message. "】<br>"; } echo "コメント一覧<br>" .$comment. "<br>ここまで\n"; という感じで書いてみましたが、★の部分に通し番号をつけて、 コメント一覧 コメント0【aaa】 コメント1【bbb】 コメント2【bbb】  (以下指定した数の分だけリピート) ここまで のように表示させたいのです。 $msgに渡した要素の数だけリピートされますが、通し番号も合わせて表示できないでしょうか? ○回分だけリピートする、という指定用に変数を増やしても構いません。 PHPはあまり詳しくなく、サンプルを少しずつ修正して使っている程度です(>_<) よろしくお願いします。

    • ベストアンサー
    • PHP
  • forEachをIEで使う方法はありますか?

    下記のコードは、javascriptのforEachを使って、配列の要素に対して順に処理をしていくものです。 forEachはFirefoxやChromeには対応していてInternetExprolerでは対応していないところまでは 調べて分かったのですが、その対策が分かりませんでした。 InternetExprolerでも動かすためにはどのようにしたらよいのでしょうか。 <html lang="ja"> <head> <title>テスト</title> </head> <body> <script type="text/javascript"> function aaa() { var ary = ["1", "2", "3"]; ary.forEach(bbb); function bbb(ccc) { alert(ccc); } } aaa(); </script> </body> </html>

  • foreach文について、今朝、回答いただいて、その時は分かったつもり

    foreach文について、今朝、回答いただいて、その時は分かったつもりだったのですが、 やっぱりよく分かっていなかったようなので、もう一度質問させてください。 今朝質問した内容は、下記です。 ▼配列の要素の値をループ中に変更して確認したいのですが、   http://okwave.jp/qa/q5943567.html 例えば、下記例のとき、上記と挙動が異なるのは、なぜでしょう? このforeachでは、値を書き換えできないので、 そもそも、上記と比較をしてはいけないのでしょうか? $arr = array("値1", "キー1" => "値2", "値3"); foreach($arr as $val){ $val = "{$val}の値利用"; echo $val."<br />"; } foreach($arr as $val){ echo $val."<br />"; } 1)$arrの内容を$valにコピー 2)$valに値を代入 3)$valを表示 4)1)へ戻る で、特に分からないのが、以下です。 上のforeachで、 代入後の値が表示されるのは、 なぜでしょうか。 今朝質問した「$arr as $key => $val」 のときと比較して、 どなたか解説していただけないでしょうか?

    • ベストアンサー
    • PHP
  • foreach のバグでしょうか。PHP 5.3.3 で悩んだところが

    foreach のバグでしょうか。PHP 5.3.3 で悩んだところがあります。 あるレコードが正規表現にマッチした場合、そのレコードに対して何らかの処理をするスクリプトを書いていました。 しかし思ったように動かず原因を調べました。結果、配列の値が変わっていることに気づきました。  ◇テスト用レコードの内容   http://www.yahoo.co.jp/   http://www.bing.com/   http://www.goo.ne.jp/   http://www.google.co.jp   http://d.hatena.ne.jp/  ◇先頭一致して欲しい文字列   http://www.google.co.jp/   http://www.bing.com/   http://www.youtube.com/  この場合、処理の対象は2件です。  私が書いたスクリプトでは3回マッチしてしまいます。  以下、テスト用に作ったスクリプトです。 <?php // URL のパターンを用意 (とりあえず以下の3パターン) $ar = array(); $ar['Google'] = array(  'URL' => 'http://www.google.co.jp/' ); $ar['Bing'] = array(  'URL' => 'http://www.bing.com/' ); $ar['YouTube'] = array(  'URL' => 'http://www.youtube.com/' ); // 先頭一致の正規表現にする foreach($ar as $key => &$value){  $value['regex'] = '/^' . preg_quote($value['URL'], '/') . '/'; } echo("URL の パターンを出力してみる/n"); print_r($ar); // テスト用 レコード $list = array(); $list[] = 'http://www.yahoo.co.jp/'; $list[] = 'http://www.bing.com/'; // match. $list[] = 'http://www.goo.ne.jp/'; $list[] = 'http://www.google.co.jp/'; // match. $list[] = 'http://d.hatena.ne.jp/'; // マッチするのは2回のみ...のはずが for($n = 0; $n < count($list); $n ++){  foreach($ar as $key => $value){   if(preg_match($value['regex'], $list[$n], $match)) echo("match.\n");  } } echo("もう一度 URL のパターンを出力してみる\n"); print_r($ar); echo("なぜか一番最後の配列の値が変わっている。\n"); ?>

    • ベストアンサー
    • PHP
  • ちょっと複雑なURL分解について

    http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/ (表示上の問題でURLを途中で改行しています) 上記のようなURLを取得($_GET)した場合に、URLを分解して下記の値を得るスクリプトを作成しています。 $mode値:link $id値:3 $url値:http://hogehoge.com/ これだけであれば特に悩む必要はないのですが、問題は$url値に以下のようなデータが与えられた場合です。 http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/index.php?mode=abc&id=123 (表示上の問題でURLを途中で改行しています) このようなURLを取得($_GET)した場合に、以下の値を得るにはどう処理すれば良いのでしょうか。 $mode値:link $id値:3 $url値:http://hogehoge.com/index.php?mode=abc&id=123 どなたか詳しい方がいらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • foreach (1..4){ 英文字$_→$新しい変数として使いたい

    $a1="あああ"; $a2="いいい"; $a3="ううう"; $a4="えええ"; $a5="おおお"; foreach (1..5){ $view = "a$_"; print <<"HTML"; $view<BR> HTML } の時、$viewに$a1~$a5の値を表示させるようにしたいのですが、上記の場合ですとa1~a5として表示されます。 foreachで$_で順に数字をaと組み合わせて出来た文字列を変数として使い、元々指定してある値を取得するようにしたいのです。 どのようにすれば解決できますでしょうか。ご掲示頂けましたら幸いです。

    • ベストアンサー
    • Perl
  • foreachの値をメール本文に表示させたい

    はじめまして。どうしても困ってしまったので、ご教授願えれば思い質問させていただきます。 チェックボックスを使ったメールフォームで流れは、hearing1.html→hearing1_check.php→hearing1_finish.phpという流れです。 最後のhearing1_finish.phpまでは、foreachを使いデータを保持できたのですが、その値をメール本文に挿入するところで躓いています。スクリプトは ******************************* foreach($closed as $line1){ $closed .= $line1; } ******************************* と値を連結し、メール本文の ******************************* $body_guest = " 定休日:$closed "; ******************************* で表示させ、 ********************************************************* if (mb_send_mail($email,$title_guest,$body_guest,"From:order@******.com")){ $show_finish = $mail_complete; }else{ $show_finish = $mail_fail; } ********************************************************* でメール送信したいと思っています。メールは値も表示できたのですが、 *********************** 定休日:array(月 火 水) *********************** となってしまい、array()の部分を取り除く方法を教えていただけないでしょうか?よろしくお願い致します。

    • 締切済み
    • PHP
  • apcacheの設定

    apcacheの設定で、 http://www.hogehoge.com/test/ とか http://www.hogehoge.com/test.html 等のURLも,ErrorDocumentによるデダイレクトによらず、ワイルドカード的な設定で http://www.hogehoge.com/ として応答するような設定はできるでしょうか?