配列のループ展開で存在チェックが正常に機能しないエラーが発生しています

このQ&Aのポイント
  • 配列のループ展開で、存在チェックが正常に機能しないエラーが発生しています。
  • ループ展開の際に、配列内を検索しても常に「存在しません」となってしまいます。
  • このエラーの原因を特定するために、コードを確認しましたが、どこが間違っているのかが分かりませんでした。
回答を見る
  • ベストアンサー

配列のループ展開

下記で配列内を検索しても、「存在しません」になります。 どこが、間違っているのでしょうか? <?php for($i = 1; $i <= 42; $i++) { $seminar = "http://www.hoge.com/hoge/".sprintf("%04d", $i).".html"; echo $seminar; } $url = array( $seminar ); $myUrl = "http://www.hoge.com/hoge/0020.html"; if(in_array($myUrl, $url)){ echo "配列に".$myUrl."は存在します。"; } else { echo "配列に".$myUrl."は存在しません。"; } ?>

  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5071/13250)
回答No.1

for文の終わりのカッコの位置が悪いし、$urlへのデータの入れ方が悪い。 これでは、for文の一番最後に作った "http://www.hoge.com/hoge/0042.html" だけが $url に入ってます。 for文の部分を下記のようにしたら、目的の動作になると思います。 $url = array(); for($i = 1; $i <= 42; $i++) { $seminar = "http://www.hoge.com/hoge/".sprintf("%04d", $i).".html"; $url[] = $seminar; }

oh-sit
質問者

お礼

動きました!!! 有難う御座います。(^^) もっと勉強します。

関連するQ&A

  • arrayの中で、ループを使った採番など。

    前回の続きになるのですが、下記の様に、arrayを複数にすると動かなくなります。 何が間違っているのでしょうか? $url = array(); for($i = 1; $i <= 42; $i++) { $seminar = "http://www.hoge.com/seminar/".sprintf("%04d", $i).".html"; $url[] = $seminar; } $test = array( "http://www.hoge.com/seminar/0043_01.html" "http://www.hoge.com/seminar/0043_02.html" ); $array = array($url, $test); $myUrl = "http://www.hoge.com/seminar/0045.html"; if(in_array($myUrl, $array)){ echo "配列に".$myUrl."は存在します。"; } else { echo "配列に".$myUrl."は存在しません。"; }

    • ベストアンサー
    • PHP
  • 配列の値をループ

    よろしくお願いします。 例えば、$ary=array(1,2,3,4,5,6,7); という配列があるとします。この1,2,3,4,5,6,7の値を ループで表現することは可能でしょうか?? for文で試してみましたが、 $hoge="for($i=0;$i<7;$i++){ print $i; }"; $ary=array($hoge); 表示結果 for($i= でした。""で囲んだのでそのまま文字としてなったんだと 思います。""をはずすとエラーになります。 理想の表示結果は当然 1,2,3,4,5,6,7です。 行いたいことの意図はわかっていただけたでしょうか? 可能な場合、どういう記述をすればうまくいくのでしょうか? それとも不可能なのでしょうか?よろしくお願いします。 環境 php4.4.4 apache2 winXP

    • ベストアンサー
    • PHP
  • 配列IF()について質問です。

    $bad = -1; $bad2 = array_search($bad,$king_array); if($bad2==""){ echo "こんばんわ"; }else{ if($king_array[$bad2-1]!==-1 and $king_array[$bad2]==-1){ $king_array[$bad2] = ($king_array[$bad2-1]+$king_array[$bad2+1])/2; }else{ echo "おはよう"; }}} 現在こんな感じで、配列に-1が有れば、代入する式を書いています。 しかし、これだと配列に-1が二つ入る(例:80,-1,60,-1,50)と上記の式を実行してくれなくなります。 これを解決するにはどうすれば良いですか?? 他にも-1が連続で二つ入った場合はどうすれば良いですか??

    • ベストアンサー
    • PHP
  • 配列の中に一部の文字があるかどか確認したい。

    <? header("Content-Type: text/html; charset=EUC"); $sample = array('test1' => "aaa 000 222 333" ,'test2' => "b 555 888 999",'test3' => "c 777 111 10"); if(in_array("222",$sample)){ echo "●"; } if(in_array("aaa 000 222 333",$sample)){ echo "○"; } ?> というようにPHPを記述すると「○」はでるのですが、 「●」がでません。 eregのように配列の中に一部の文字があるかどうかを確認する場合はどうしたらよいのでしょうか。

    • 締切済み
    • PHP
  • 配列への展開

    以下のような配列があります。 ★ファイル名 01.php $list[01] = array( "01_01"=>"a", "01_02"=>"b", "01_03"=>"c", ); 自分自身のファイル名を読み取って、変数に入れます。 $category = $_SERVER["PHP_SELF"]; $category = ereg_replace(".php","",$category); $category = ereg_replace("/","",$category); ここで $categoryは 01 になります。 そして、以下の用に展開したいと思います。 while(list($c,$name) = each($list[$category])){ echo "$c1:$name<br>"; } ただ、each($list[$category]))とやってしまうと、 Warning: Variable passed to each() is not an array or object in /var/www/home/hola/public_html/001.teki2.com/01.php on line 51 とエラーがでます。 each($list[01])) と直接数字を入れると、ちゃんと稼動します。 each($list[$category])) をどのように書き換えればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列名や変数の一部として変数(文字列)を使う方法?

    PHPを勉強し始めたばかりの者です。以下のような状態で、 配列の要素(例「へべれけ」)を出力したいのですが、 どうもうまく行きません。どうかアドバイスをいただけませんでしょうか? <?php $arDrunk = array("ほろ酔い","へべれけ","記憶なし"); $status = array("Sleepy","Drunk","Hungry"); $ref = $status[1]; //Drunk $hoge = "ar$ref"; //arDrunkと入れているつもりです。 // ↓print_rではちゃんと全ての要素が閲覧できるのに echo "<pre>"; print_r($$hoge); echo "</pre>"; // ↓では何も出力されません。 echo $$hoge[1]; // $arrayDrunk[1]、つまり「へべれけ」を出したい。 echo '$$hoge[$i]という形では使えないのでしょうか?' ?> もしかして$$hogeを処理するための、JavaScriptでの evalのようなものがあるのでしょうか?

    • ベストアンサー
    • PHP
  • ナベアツプログラム(3の倍数と3の付く数字)

    PHPを勉強中です。 勉強の為に思いついたものをPHPで書いてみようと思い、ネタが古いですが100までの数字を表示し、見やすいように3桁揃えで10ずつで改行して、3の倍数と3のつく数字を太字で表示するプログラムを書いてみました。なんとなくできたようなかんじなのですが、30だけ太字になりません。原因がわかる方がいらっしゃれば教えていただけたら嬉しいです。よろしくお願いします。 <?php for($i = 1; $i <= 100; $i++){ if($i % 10 == 0) { echo sprintf('%03d', $i)." "."<br>"; } elseif($i % 3 == 0) { echo('<strong>'.sprintf('%03d', $i)." ".'</strong>'); }elseif(strpos($i,"3") !== false) { echo('<strong>'.sprintf('%03d', $i)." ".'</strong>'); }else{ echo sprintf('%03d', $i)." "; } } ?>

    • ベストアンサー
    • PHP
  • フォームを使った配列変数の受け渡し

    PHP初心者です、よろしくお願いします。 フォームからPHPで配列変数を受け渡すことを考えています。 一次元配列はうまく渡せましたので、これを二次元にしましたところ、 うまく渡せません。基本的なPHPの文法がわかってないので、つまづい ています。多分、配列変数の記述方法がおかしいのだと思うのですが・・。 ご教授よろしくお願いします。 <html> <body> <form method = "POST" action ="test2.php" > <?php //データ渡し側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10'>\n"); echo ("<br>\n"); } echo ("</tr>\n"); } ?> <input type="submit" name ="sbmit" value="data_input" > </form> </body> </html> <?php //データ受け側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j < 2;$j ++ ){ $tmp_data[$i][$j] = $_POST["data"][$i][$j]; echo ("$tmp_data[$i][$j] <br>\n"); } } ?> <html> <body> <form method = "POST" action ="test2.php" > <?php for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10' value='$tmp_data[$i][$j]'>\n"); echo ("<br>\n"); } } ?> </table> <input type="submit" name ="sbmit" value="in" > </form> </body> </html> 実行結果は、 Array[0] Array[1] Array[0] Array[1] と表示されて、実際の入力した値が反映されません。

    • ベストアンサー
    • PHP
  • [CakePHP] Paginatorのリンクが変

    CakePHPのPaginatorを使ったページリンクが正しく出力されません。 1ページ目は正しく出力できていますが、2ページ目などに移動した際にURLがおかしくなります。 現状 1ページ目 http://www.example.com/hoge/2 ↓ 2ページ目 http://www.example.com/hoge/2/page:3 理想 1ページ目 http://www.example.com/hoge/2 ↓ 2ページ目 http://www.example.com/hoge/3 また、パラメータがついた場合も 1ページ目 http://www.example.com/hoge/2?hoge=hoge ↓ 2ページ目 http://www.example.com/hoge/3?hoge=hoge となるようにしたいのですが、何を間違えているのでしょうか。 ちなみにソースは以下のようになってます。 View/Hoge.php echo $this->Paginator->prev('< 前へ', array(), null, array('class' => 'prev disabled')); echo $this->Paginator->numbers(array('separator' => '')); echo $this->Paginator->next('次へ >', array(), null, array('class' => 'next disabled')); Config/routes.php Router::connect(     '/hoge/:page',     array(         'action' => 'hoge',     ),     array(         'pass' => array(             'page',         )     ) );

    • 締切済み
    • PHP
  • 配列を回すとき、最後の要素だけ違う処理をしたい

    hoge[0]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[1]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[2]に対して、配列の中身を処理して, 最後にカンマを付与 hoge[3]に対して、配列の中身を処理して, 最後にカンマを付与しない というようなことをするとき、 どう書けばよいでしょうか? for ($i = 0 ; $i <count($hoge); $i++) {   if($i< count($hoge)-1){    //配列の要素が最後じゃないのに対する処理     .",";  }else{    //配列の要素が最後のに対する処理  } } ってしたら、とりあえず、動いたのですが、 普通はどういう風に書くのでしょうか? foreachとか、あるいは、配列の最後に対してする何か 書き方ってあるのでしょうか

    • ベストアンサー
    • PHP

専門家に質問してみよう