• ベストアンサー

foreachがうまく動かない

$fruits = array( array( "name" => "apple", "color" => "red", ... ), array( "name" => "banana", "color" => "yellow", ... ), ... ); foreach ($fruits as $fruit) { echo "名前:$fruit['name']<br \/>"; echo "色:$fruit['color']<br \/>"; ... } で、 名前:apple 色:red ... のように表示させたいのですが、きちんと動きません。 どこが間違っているのでしょうか。 よろしくお願いします。

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

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

  • ベストアンサー
  • widoww
  • ベストアンサー率20% (33/159)
回答No.4

$fruits = array( array( "name" => "apple", "color" => "red" ), array( "name" => "banana", "color" => "yellow" ) ); foreach ($fruits as $fruit) { //print_r ($fruit); echo "名前:$fruit[name]<br \/>"; echo "色:$fruit[color]<br \/>"; } これでうまくいくと思います^^ 原因はこれです。 ○ echo "色:$fruit[color]<br \/>"; × echo "色:$fruit['color']<br \/>";

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

こんなかんじでどうでしょう <?PHP $fruits = array( array( "name" => "apple" ,"color" => "red" ) ,array( "name" => "banana" ,"color" => "yellow" ) ); if(is_array($fruits)) foreach($fruits as $fruit){ echo "名前:{$fruit['name']}<br \/>"; echo "色:{$fruit['color']}<br \/>"; }

KanjiTalk
質問者

お礼

と、思ったら間違いでした(違うファイルを編集していた)。 もう一度確認してみます。

KanjiTalk
質問者

補足

ifブロックの内側まで実行されるのですが、やはり同じエラーが出ます。

  • xpector
  • ベストアンサー率75% (3/4)
回答No.2

Invalid argument supplied for foreach() と出ているのであれば、foreach()に配列以外の変数を渡している可能性があります。 foreach ($fruits as $fruit) の $fruitsは本当に配列になっていますか? foreachの直前で print_r($fruits); 等して、$fruits の中身を確認してください。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

> echo "名前:$fruit['name']<br \/>"; > echo "色:$fruit['color']<br \/>"; echo "名前:$fruit[name]<br />"; echo "色:$fruit[color]<br />"; としてみてはいかがでしょうか。

KanjiTalk
質問者

お礼

早速のご回答ありがとうございます。

KanjiTalk
質問者

補足

クォーテーションとエスケープ文字を省きましたが、 同じエラーが出続け、原因は他の場所にもあるようです。 書き忘れていましたが、エラーメッセージでは、 Invalid argument supplied for foreach() とのことですが。

関連するQ&A

  • PHP foreach文

    PHPのforeach構文なのですが以下ソースコードの13行目、foreach文の中の「$juice」なのですが、どこから出てきた物なのでしょうか? 今PHPの参考サイトを見ながら学習という形をとっているのですが 「$juice」が何処から出てきた物かわかりません。 サブライムテキストのラインハイライトで掛けても見つからなかったので... 参考URL http://creive.me/archives/8719/ <html> <head><title>accesslog.php</title></head> <body> <?php $fruits_juice = array( 'orange' => 'orange juice', 'melon' => 'melon juice', 'grape' => 'grape juice', 'banana' => 'banana juice', 'strawberry' => 'strawberry juice' ); foreach ($fruits_juice as $fruit => $juice) { echo $fruit . "(果物) => " . $juice . "(ジュース)<br>"; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • forを使わずにforeach文のみでループを回す

    ○質問の主旨 先日、下記の質問をしました。 PHPのfor文とforeach文の使い方 http://okwave.jp/qa/q8812443.html この例では,for文とforeach文を使って、 ・果物の名前を4回繰り返す ・繰り返しの2回目と4回目は、"食べてください"という文字列を入れる というプログラムを実現しています。 今回は同じ出力をするにあたって、 繰り返しはforeachのみで実現したいと考えています。 どのように修正すればよろしいでしょうか? ご存知の方がいらっしゃいましたら、 ご教示を願います。 ○質問の補足 このようなプログラムにしたいと考えています。 $fruits = array("りんご", "ばなな", "ぶどう", "みかん"); foreach ($fruits as $value) { // 果物の名前を4回繰り返して2回目と3回目は"食べてください"を入れる if (($i == 1) || ($i == 3)) { echo "食べてください"; echo "<br/>"; }; echo $value; echo "<br/>"; } 完成イメージはこんな感じです。 (1回目のループ) りんご ばなな ぶどう みかん (2回目のループ) 食べてください りんご ばなな ぶどう みかん (3回目のループ) りんご ばなな ぶどう みかん (4回目のループ) 食べてください りんご ばなな ぶどう みかん ○前回のプログラム for($i = 0; $i < 4; $i++) { if (($i == 1) || ($i == 3)) { echo "食べてください"; echo "<br/>"; }; $fruits = array("りんご", "ばなな", "ぶどう", "みかん"); foreach ($fruits as $value) { echo $value; echo "<br/>"; } }

    • ベストアンサー
    • PHP
  • PDOのバインドをforeachでまとめて処理したいができません…。

    いつもお世話になっております。 PHP5.2.5 --------------------------- DB(フィールドは以下3項目) ・id(primary key) ・color ・num --------------------------- //DBにインサートするデータ群(配列に格納してある) $insert_array = array('color'=>'red','num'=>6); //================================================== // *フィールド名とそれに対応するデータをバインドする。 //================================================== //================================================== // *バインド:方法1 //================================================== foreach($insert_array as $field => $value){  //確認処理  //echo $field.'<br/>';  //echo $value.'<br/>';  //バインド(foreachで、1つずつバインドしていく)  $stmt->bindParam(':'.$field,$value); } //================================================== // *バインド:方法2(↓こちらだと上手くいく。) //================================================== /* $stmt->bindParam(':'.'color',$insert_array['color']); $stmt->bindParam(':'.'num',$insert_array['num']); */ //================================================== // *バインド後、「$stmt->execute();」した結果 // *DBにインサートされたものをprint_r()にて確認 //================================================== ★方法1 Array ( [id] => 15 [color] => 6 [num] => 6 ) //--------------------------- ★方法2 Array ( [id] => 16 [color] => red [num] => 6 ) //--------------------------- ★方法1の結果の、「 [color] => 6」って一体…?! 方法2のように、同じバインド処理を手書きで繰り返す分にはうまくいくのですが、 方法1のようなforeachでまとめて処理するやり方だとうまくいきません。 方法1の問題箇所をどなたか教えて下さい。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • array_combine()について

    http://phpspot.net/php/man/php/function.array-combine.html こちらを参考に配列のまとめ方と取り出し方を模索中です。 $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $c = array_combine($a, $b); ↑こちらは、 foreach($c as $key => $value){ ~ } ↑このような感じでそれぞれ取り出せると思います。 ここまではいけました。 この状態で対象が3つ以上になった場合は、どういう対応方法があるのでしょうか。 $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $hoge = array('100', '150', '80'); array_combine()でできるのでしょうか。 他の関数を使うのでしょうか。 不慣れですみません。 アドバイスいただけますとうれしいです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 再帰の仕方

    現在配列の出力結果が↓なのですがこれを array(2) { [0]=> string(6) "orange" [1]=> array(2) { [0]=> string(6) "apple" [1]=> array(2) { [0]=> string(6) "banana" [1]=> array(2) { [0]=> string(10) "Strawberry" } } } } ↓こっちのように変えたい場合の処理がどうしてもできません。 array(2) { [0]=> string(6) "orange" [1]=> string(6) "apple" [2]=> string(6) "banana" [3]=> string(10) "Strawberry" } 今自分がやってる途中のものです↓ $fruit = array("orange", array("apple", array("banana", array("Strawberry")))); function first_array($fruit) { foreach($fruit as $key => $value) { if(! is_array($value) === true ) { echo $value; } else { first_array($value); } } } $new_array = first_array($fruit); echo で orangeapplebananaStrawberry と表示はされるのですが、 配列に入れる方法がわかりません。 普通にこの部分を ~ if(! is_array($value) === true ) { $array[] = $value; } ~ とすると上書きされてしまっているのかな? 一個しかデータが残ってないのです・・・。 ご教授ください。

    • ベストアンサー
    • 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
  • 配列の要素を表示しない

    PHP初心者です、宜しくお願いいたします。 下のような配列を表示させるソースを書きましたが、要素を表示しません。 どこが間違っているのかさっぱり分かりません。誰かお助けください。 <?php $color3 = array(0 => " red ", 1 => " green ", 2 => " blue "); foreach($color3 as $key => $val) { echo "現在の添え字は ". $key . "<br/><br/>"; echo "現在の要素は ". $Val . "<br/>"; } ?> 以下のような表示になり、要素が表示されません。 現在の添え字は 0 現在の要素は 現在の添え字は 1 現在の要素は 現在の添え字は 2 現在の要素は

    • ベストアンサー
    • PHP
  • foreachについて

    phpを今勉強中なのですがforeachで少し分からない部分があります。 例えば(1)はnのある配列を消去するだけのプログラムでして、これを (2)のように書き換えてみると、全て表示されてしまい、(1)と同じ動きをしません。 phpマニュアルを読む限り同じ動きをすると思うのですが、array_keys($key1)の中に うまく一時配列のキーが入っていないように思います。 どうしてでしょうか? (1) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if($key=="n") unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?> (2) <?php $food["y"]["bb"]= "k1"; $food["n"]["bb"]= "k2"; $food["n"]["cc"]= "k3"; $food["k"]["dd"]= "k4"; foreach($food as $key=>$key1){ foreach($key1 as $key2=>$key3){ if(in_array("n",array_keys($key1))) unset($food[$key][$key2]); } } echo "<pre>"; print_r($food); echo "</pre>"; ?>

    • ベストアンサー
    • PHP
  • smartyのforeachの使い方

    仮に$strが以下のような配列を持っている場合smartyのtpl側で 出力させたいのですがうまくいきません。 Array ( [0] => Array ( [id] => 1 [name] => 名前 [sub_id] => Array ( [0] => 12 [1] => 13 ) [sub_name] => Array ( [0] => あああ [1] => いいい ) [sub_cnt] => Array ( [0] => 5 [1] => 5 ) ) [1] => Array ( [id] => 1 [name] => 名前 ) ) sub_***は配列が存在するものとしないものがあります。 そしてtpl側は {foreach item=items from=$str} <ul id="side{$items.id}"> {foreach item=item from=$items} <li><a href="index.php?id={$item.sub_id}">{$item.sub_name} ({$item.sub_cnt})</a></li> {/foreach} </ul> {/foreach} とforeachを重ねてみたのですがsub_***の値が表示されない 状態です。 複雑な配列なのですがこの場合どうすればうまく表示させれるの でしょうか?

    • ベストアンサー
    • PHP
  • PHPのfor文とforeach文の使い方

    PHPのfor文とforeach文を使って、 ・果物の名前を4回繰り返す ・繰り返しの2回目と4回目は、"食べてください"という文字列を入れる という出力を返したいと考えています。 完成イメージは次のとおりです。 (1回目のループ) りんご ばなな ぶどう みかん (2回目のループ) 食べてください りんご ばなな ぶどう みかん (3回目のループ) りんご ばなな ぶどう みかん (4回目のループ) 食べてください りんご ばなな ぶどう みかん しかし自分が作成したプログラムでは、 次の2点について問題があります。 ・すべての繰り返しの前に"食べてください"が入ってしまう ・for文のループが止まらない 完成イメージの通りのプログラムにするためには、 どのように修正すればよろしいでしょうか? ご存知の方がいらっしゃいましたら、 ご教示願います。 ○質問の補足 自分が作成したプログラムは以下のとおりです。 for($i = 0; $i < 4; $i++) { if (($i = 1) || ($i = 3)) { echo "食べてください"; echo "</br>"; }; $fruits = array("りんご", "ばなな", "ぶどう", "みかん"); foreach ($fruits as $value) { echo $value; echo "</br>"; } } 以上、よろしくお願い申し上げます

    • ベストアンサー
    • PHP

専門家に質問してみよう