文字列連結がうまくいかない!ループ処理でdiv要素を作成する方法は?

このQ&Aのポイント
  • 文字列連結がうまくいかない状況で、ループ処理を使用して複数のdiv要素を作成したいと考えています。具体的には、以下のコードをループさせたいです。
  • しかし、このままではうまくいかないようで、何か間違いがあるようです。正しいコードを教えていただけますか?
  • 実現したい目標は、「tab3-1」から「tab3-5」というIDを持つdiv要素を作成し、その中にtestfunc関数を実行することです。
回答を見る
  • ベストアンサー

文字列連結がうまくいきません

define("SITE3_1", "http://www.yahoo.co.jp/"); (略) <div id="tab3-1" class="hoge"><dl><?php testfunc(SITE3_1,1,1); ?></dl></div> <div id="tab3-2" class="hoge"><dl><?php testfunc(SITE3_2,1,1); ?></dl></div> <div id="tab3-3" class="hoge"><dl><?php testfunc(SITE3_3,1,1); ?></dl></div> <div id="tab3-4" class="hoge"><dl><?php testfunc(SITE3_4,1,1); ?></dl></div> <div id="tab3-5" class="hoge"><dl><?php testfunc(SITE3_5,1,1); ?></dl></div> となってるのをループ処理したいのですが、 うまくいきません。   <?php    for($i=1; $i< 6; $i++){     echo "<div id=\"tab3-\".i.\" class=\"tabPanel\"><dl>";     testfunc(("SITE3_".i."),1,1)";     echo "</dl></div>";    }   ?> どう書けばよいでしょうか?

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数2
  • ありがとう数2

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

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

定数で設定した値を、動的に扱いたい場合は、可変変数のように扱うことが出来ないので、 http://jp2.php.net/manual/ja/function.constant.php constant関数を使います。 <?php testfunc(constant('SITE3' . $i), 1, 1); ?> ですね。

re999
質問者

お礼

うまくいきましたッ! ご回答いただいたみなさん、ありがとうございました! 大変勉強になりましたー!

その他の回答 (1)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

ざっとしか見てませんが、とりあえず、ケアレスミスその1 $i と するべき所が、$が無く、i だけになってます。 あと、↓これ実行したらParse Error 出るんじゃないかな~?とか思ったり。 testfunc(("SITE3_".i."),1,1)"; 多分、こうしたほうが良いかも。 $a = "SITE3_" . $i; testfunc($a , 1 , 1); あと、これは 個人的に言いたいこと。 \" は 見づらいから シングルクォートにして欲しい。。 どうしても、ダブルクォートを使いたいなら 止めはしませんけども。

re999
質問者

補足

回答ありがとうございます。 >$i と するべき所が、$が無く、i だけになってます。 気が付きませんでした。 おかげで、だいぶ前進したのですが、 まだ分からないとこがあります。 分からないとこだけ、切り出してみました。  <?php   define("SITE3_1", "http://www.yahoo.co.jp/");   for( $i = 1; $i < 2; $i ++ ){    $a = "SITE3_".$i;    var_dump($a);    var_dump(SITE3_1);   }  ?> これを実行すると、上の方の表示結果が、"SITE3_1"となります。 両方の表示結果を、"http://www.yahoo.co.jp/" とするには、 どうすればよいでしょうか?

関連するQ&A

  • PHPのスクリプトで質問です。

    いつもお世話になっています。 PHPのスクリプトで質問なのですが、 まずは以下のスクリプトを拝見下さい。 <?php $opname=""; $opt=""; for($i=0;$i<sizeof($options_name);$i++) { $opname.="<div id='opname$i'>".strip_tags($options_name[$i])."</div>"; $opt.="<div id='opt$i'>$0</div>"; ?> <?php if ($options_comment[$i] != '' and $options_comment_position[$i] == '0') { ?> <h3 class="attributesComments"><?php echo $options_comment[$i]; ?></h3> <?php } ?> <div class="wrapperAttribsOptions"> <div class="optionName back"><?php echo $options_name[$i]; ?></div> <div class="back"><?php echo "\n" . $options_menu[$i]; ?></div> <div><?php echo $opt; ?></div> このとき、 オプション名1 選択メニュー1 価格[表示]         選択メニュー2        選択メニュー3 オプション名2 選択メニュー1 \0         選択メニュー2 価格[表示]        選択メニュー3 オプション名3 選択メニュー1 \0         選択メニュー2 \0        選択メニュー3 価格[表示] という風になってしまいます。 \0は、不要のため、表示したくないのですが・・・ どなたかご存知の方ご教授お願いできないでしょうか!!! 宜しくお願いします!!!

    • ベストアンサー
    • PHP
  • phpで文字列に入ったhtmlタグの中身を取得

    phpで次の文字列の中身を自分の思ったように取得したいです。 -----$textの中身 <div class="hoge">ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2</div> -----自分の実行したphpコード preg_match_all("/<div class=\"hoge\">(.*?)<\/div>/s", $text, $textArr); -----結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ -----自分の望む結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2 ---------------------------------- divタグの中にdivタグが入っている時、 最初の/divに反応してしまいます。ちゃんと、ほげほげ2まで取得する方法を教えてください。

    • 締切済み
    • PHP
  • 任意の数だけ繰り返した文字列をreturnで返したい

    wordpressで指定した数だけ文章を繰り返すショートコードを作りたいです。 最終的にreturnで値を返したいのですが、whileを使うとreturnで繰り返しがとまってしまうので困っています。 ↓書いてみたもの ------------- function hogeList($atts) { extract(shortcode_atts(array( // "id" => '', "num" => '' ),$atts)); $i=0; do { $block = "<li>IDは" .$id. "、番号は" .$num. "番です</li>\n"; ++$i; } while($i<$num); // numの数だけ繰り返す return "<ul class=\"user\">" .$block. "番</ul>\n"; } add_shortcode("hoge", "hogeList");//hogeListを[hoge]というショートコードにする ------------- 例えば[hoge id=hoge num=3]の時、 <ul> <li class="user">IDはhoge、番号は0番です</li> <li class="user">IDはhoge、番号は1番です</li> <li class="user">IDはhoge、番号は2番です</li> </ul> となるようにしたいです。 printやechoではなく、returnで返す必要がある理由はこちらです。 『ショートコードハンドラ関数の返り値は、ショートコードマクロの代わりに投稿コンテンツの出力に挿入されます。 echo ではなくて return を使用するようにしてください。 echo されたものは全てブラウザに出力されますが、ページの適切な箇所に表示されません。』 引用元:http://www.c-styles.jp/archives/191#more-191 printやechoだと繰り返しは上手くいくのですが、確かに表示箇所がおかしくなります。 記事の続きに書いていても、他の文章を無視して本文の一番上に強制的に表示されていました。 しかしreturnを使うと繰り返しがとまってしまい、最初の1つしか表示されません。 確かにreturnやbreakで停止させると解説されていたので、仕方ないのですが、何か方法はないでしょうか? 初心者なので、google先生に聞いたりネットのPHP初心者向けの解説を見ながら見様見真似でやっています…。 色々なサンプルを見ていると、foreachというのが何か近そうな気がする…!と思ったのですが、サンプルが配列(で合ってるでしょうか…)が固定された状態のものが多く、任意の数値や文字を渡して使いたい場合にどう扱えばいいか分からないのです。 どなたかお知恵を貸していただけないでしょうか。 wordpressではありますが、内容的にはPHPの方だと思いこちらのカテゴリで質問させていただきました。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • setTimeoutをループさせDOMを処理したい

    「setTimeout」「for文」「jQuery」を利用して、1秒ごとに、 <div class="hoge1">、<div class="hoge2">、<div class="hoge3">へ対して、同じ処理をしたいです ■処理内容イメージ ・ループカウントの変数iを渡して、それぞれのdiv内で、1、2、3と表示 ■質問 「setTimeout」を1秒ごとに、指定DOMへ対して、ループさせる方法を教えてください ※ループできるなら、「for文」じゃなくても良いです

  • 自働生成される<div>タグに連番を振りたい

    いつもお世話になってます。 早速ですが、質問です。 <div class=hoge">あああ</div> <div class=hoge">あああ</div> <div class=hoge">あああ</div> <div class=hoge">あああ</div> と自動的に吐き出される時、 divに【 class="hoge" id="hoge1" 】のように記述を追加したいのです。 <div class=hoge" id="hoge1">あああ</div> <div class=hoge" id="hoge2">あああ</div> <div class=hoge" id="hoge3">あああ</div> <div class=hoge" id="hoge4">あああ</div> ただ、onloadイベントを使わずに上記を実行したいのですが、 書き方が分かりません。 onloadを使わない書き方をご教授ください。 よろしくお願いします。

  • はじめて質問させていただきます!

    はじめて質問させていただきます! 宜しくお願い申し上げます! 友人にajaxでmysqlから最新の1件のニュースデータを引っ張り出して表示させるphpスクリプトを作ってもらいました。 こんな感じになります。 <!---ここからがスクリプトで---> <?php $i = 0; foreach ($news as $thenews): $class = null; if ($i++ % 2 == 0) { $class = ' class="altrow"'; } ?> <dl> <dt> <?php echo $my->df($thenews['News']['date'],"Y.m.d"); ?>【<?php echo $thenews['News']['title']; ?>】</dt> <dd> <div style="height: 60px; overflow-y: auto;"> <?php echo $thenews['News']['body']; ?> </div> </dd> </dl> <hr /> <?php endforeach; ?> <dl> <dt><a href="news/">■過去のニュースはこちら</a></dt> </dl> <!---ここまでで終りっす---> このスクリプトを変えて、最新の2件のニュースデータを引っ張り出して表示させようと思って、こんな風にしてみたのですが、こうすると同じニュース(最新の1件)が2個表示されてしまいました。 <!---ここからがスクリプトで---> <?php $i = 0; foreach ($news as $thenews): $class = null; if ($i++ % 2 == 0) { $class = ' class="altrow"'; } ?> <dl> <dt> <?php echo $my->df($thenews['News']['date'],"Y.m.d"); ?>【<?php echo $thenews['News']['title']; ?>】</dt> <dd> <div style="height: 60px; overflow-y: auto;"> <?php echo $thenews['News']['body']; ?> </div> </dd> <dt> <?php echo $my->df($thenews['News']['date'],"Y.m.d"); ?>【<?php echo $thenews['News']['title']; ?>】</dt> <dd> <div style="height: 60px; overflow-y: auto;"> <?php echo $thenews['News']['body']; ?> </div> </dd> </dl> <hr /> <?php endforeach; ?> <dl> <dt><a href="news/">■過去のニュースはこちら</a></dt> </dl> <!---ここまでで終りっす---> 当の友人に直してもらおうと連絡してみても、音信不通でメールも帰ってこない状態なので困ってしまい、こちらに質問させていただきました。 こんなソース見ても、わからないのかも知れませんが、もし参考になるようなご意見をいただけましたら幸いです! 何卒、宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • defineについて

    Array('0'=>'1234', '1'=>'太郎', '2'=>'20', '3'=>'TOKYO' ) この配列を以下のdefineで設定したkeyの名前に変更したいと考えています。 ---define.php--- <?php define("KEY_0", "ID"); define("KEY_1", "NAME"); define("KEY_2", "AGE"); define("KEY_3", "FROM"); ?> ---こんな形にしたい--- Array('ID'=>'1234', 'NAME'=>'太郎', 'AGE'=>'20' 'FROM'=>'TOKYO' ) ---プログラム--- <?php require_once('define.php'); for($i=0;$i<4;$i++){ /* うまくループさせてkeyを変更したいんですが どのような処理をしたらよいでしょうか?? */ } ?> 何か良い方法があれば教えていただきたいです。お願いします。

    • ベストアンサー
    • PHP
  • PHPでの画像表示について

    PHPで画像を6×3で表示させたいのですがforを使って二重ループさせる方法が分かりません。 <div id="****" class="****"> <div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div> </div> <div id="****" class="****"> <div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div> </div> <div id="****" class="****"> <div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div><div class="****">□</div> </div> 上記のような感じにしたいのですがどのようにすれば良いのか教えて頂けないでしょうか どうかよろしくお願いいたします。 ※□は画像です。

    • 締切済み
    • PHP
  • カテゴリページ内 複数タブ

    wordpressでサイト作っています idの番号を変えることで1ページ内に#numの連番で複数タブを置ける様にはしたのですが、 while文のなかで番号に連番を振るやり方がわかりません。 初心者ですいませんが、よろしくお願いします <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/ … <script type="text/javascript"> $.hoge = function( target ) { //Default Action target.find(".tab_content").hide(); //Hide all content target.find("ul.tabs li:first").addClass("active").show(); //Activate first tab target.find(".tab_content:first").show(); //Show first tab content //On Click Event target.find("ul.tabs li").click(function() { target.find("ul.tabs li").removeClass("active"); //Remove any "active" class $(this).addClass("active"); //Add "active" class to selected tab target.find(".tab_content").hide(); //Hide all tab content var activeTab = $(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content activeTab = activeTab.replace( '#', '.' ); target.find(activeTab).fadeIn(); //Fade in the active content return false; }); }// $.hoge // -------------------------------------- $(function() { $.hoge( $('#num1') ); $.hoge( $('#num2') ); }); </script> </head> <body> <div id="num1" class="container"> <ul class="tabs"> <li><a href="#tab1">Gallery</a></li> <li><a href="#tab2">Submit</a></li> </ul> <div class="tab_container"> <div class="tab1 tab_content"> <h2>Gallery</h2> </div> <div class="tab2 tab_content"> <h2>Submit</h2> </div> </div> </div> <div id="num2" class="container"> <ul class="tabs"> <li><a href="#tab1">Gallery</a></li> <li><a href="#tab2">Submit</a></li> </ul> <div class="tab_container"> <div class="tab1 tab_content"> <h2>Gallery</h2> </div> <div class="tab2 tab_content"> <h2>Submit</h2> </div> </div> </div> </body> </html>

  • WordPressにおいて、サブカテゴリーに画像を表示させる。

    WordPressにおいて、サブカテゴリーに画像を表示させる。 WordPress,PHP初心者です。 現在 情報サイトを作っているのですが、 あるカテゴリーのループ中に、サブカテゴリーにも属していると、画像を表示させたいです。 ショッピングサイト等で例を言うと 「シャツ」という大カテゴリーをループを使って一覧で出力し、 その中で、サブカテゴリー「売り切れ」や「NEW」にチェックを入れていると(管理画面で) それに適した画像が表示されるようにしたいのです。 ”「売り切れ」と「NEW」にどちらも属している場合もあります” なおかつ、そのサブカテゴリーにチェックが入っていると 上位に表示されると一層良いのですが。 ループの中で、更にループ処理?という考えがあまり正しくないような気がするのですが、 試している所やはりうまくいきません。 ソースは下記の通りです。 <!--大カテゴリーのループ開始--> <?php query_posts("cat=3&showposts=10"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="list-box"> <a href="<?php the_permalink() ?>"> <img src="<?php echo get_post_meta($post->ID,'faceimage',TRUE); ?>" alt="<?php the_title(); ?>" width="141" height="141" /> </a> <p class="name"><?php the_title(); ?></p> <p class="size"><?php echo get_post_meta($post->ID,'textfield',TRUE); ?></p> <!--売り切れの場合、画像表示--> <?php query_posts("cat=4"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="ico-on"><img src="hogehoge" alt="売り切れ" /></div> <?php endwhile; ?> <?php endif; ?> <!--新着アイテムの場合、画像表示--> <?php query_posts("cat=6"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="ico-new"><img src="hogehoge2" alt="新着アイテム" /></div> <?php endwhile; ?> <?php endif; ?> </div> <!--ループ完全に終了--> <?php endwhile; ?> <?php endif; ?> 調べてみたものの、行き詰まっています。 稚拙な質問ではございますが、 どうぞご教授お願い致します。

専門家に質問してみよう