• 締切済み

array keys について

すいません。何度かここで質問しているのですが、いまいち分からない部分があります。 既に何十時間も悩んでいて解決しません。初歩的な質問ですがよろしくお願いします。 結果としてk2k3という表示を期待しているのですが・・。 まず、$key2にはk1k2k3という配列が入り、 それからarray_keys($key2)でキーを取得するのですから array_keys($key2)にはynbが配列として入りますよね? つまり [0]=y [1]=n [2]=b となり、 これをin arrayでyという値を探して、あった場合にはunsetで削除。 何がおかしいのかさっぱり分かりません。 すいませんが間違っている部分を教えてもらえませんか? <?php $food["y"]= "k1"; $food["n"]= "k2"; $food["b"]= "k3"; foreach($food as $key1=>$key2){ if(in_array("y",array_keys($key2))) unset($food[$key1]); } ?>

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

みんなの回答

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

foreachでまわす意味はないですね <?php $food["y"]= "k1"; $food["n"]= "k2"; $food["b"]= "k3"; $key="y"; unset($food[$key]); print_r($food); ?>

cinnron
質問者

補足

すいません。foreachが意味が無いのは分かっています。 本来は多次元配列なのですが、質問を簡素にするため一次元にしただけで、 問題は質問のプログラムでは期待した結果にならないため、どこが間違っているのか 教えて欲しいのです。 本来は多次元ですので、foreachで回し、array keysでキー配列を取得→in arrayでキーの値を調べ、その結果により一部配列削除としたいのです

関連するQ&A

  • 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
  • phpのエラーが解決できません

    $food["1"]["item0"]="y"; $food["1"]["item1"]="bi"; $food["1"]["item2"]="1300"; $food["1"]["item3"]="20060630"; $food["2"]["item0"]="y"; $food["2"]["item1"]="bi"; $food["2"]["item2"]="1500"; $food["2"]["item3"]="20070630"; $e = "a"; if( $e = "a"){ foreach($food as $key1=>$array){ foreach($array as $key2=>$array2){ if ($food["$key1"]["item2"] <="1300") { unset( $food[$key1]); } } } } 上記のプログラムを書いてローカル環境で実行するとNotice Undefined offsetの警告が沢山 出ます。ググるなどして、未定義の変数などがある場合に出ると他のサイトで読んだのですが上記に特に未定義の 変数は無いように思うのですが・・。 (unsetをecho "hello";などに置き換えると警告は出ません) やりたい事は上記のような配列の集まりが数百個あり、 item2の値の数値により配列を消したりしたいのですが、警告を無くすにはどうしたらよいでしょうか。 (一時配列は1から順に増えていきます) phpを始めたばかりで解決方法を探しているのですがネット上では見つけられません・・。

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

    下記の配列についてitem2の値のみ取り出したいのですが、 foreach($food as $key1=>$array){ foreach($array as $key2=>$array2){ echo $food["$key1"]["item2"]; } } foreachで回して取り出すと555444333となります。 543という結果が欲しいのですが、 実際には下記の配列が数百と大量にあり、一次元配列の数字は下記のように0から1ずつ増えていきます。(二次元目のキーは全てitem0~item2となっています) キーの変更をしないでitem2の値のみ一度に取り出すにはどうしたらよいのでしょうか? (取り出す前に配列の削除などのプログラムもあるため、0から順番に並んでいるとは限りません。 ) $food["0"]["item0"]="y"; $food["0"]["item1"]="bi"; $food["0"]["item2"]="5"; $food["1"]["item0"]="y"; $food["1"]["item1"]="dou"; $food["1"]["item2"]="4"; $food["2"]["item0"]="n"; $food["2"]["item1"]="co"; $food["2"]["item2"]="3";

    • ベストアンサー
    • PHP
  • array_randで要素が数字の場合の処理方法

    PHPのarray_randについて教えて下さい。 下記のようなソースを作りましたが思った通りの結果になりません。 //(A) $test=array(3,5,8,11,14,24,26,28); print_r($test); foreach ($test as $val) { echo $val.'<br>'; } //(B) $keys = array_rand($test, 5);//決められた数を抽出 print_r($keys).'<br><br>'; foreach ($keys as $val) { echo $val.'<br>'; } Aの部分の結果は Array ( [0] => 3 [1] => 5 [2] => 8 [3] => 11 [4] => 14 [5] => 24 [6] => 26 [7] => 28 ) foreachの部分の出力↓ 3 5 8 11 14 24 26 28 となりこれは特に問題ありません。 Bの部分でAの配列から5つランダムで取り出したいのですが、結果は Array ( [0] => 0 [1] => 3 [2] => 5 [3] => 6 [4] => 7 ) 0 foreachの部分の出力↓ 0 3 5 6 7 となってしまい、Aの配列の添え字の中から5つの数字が選ばれるようになってしまいます。 Aの添え字ではなく「3,5,8,11,14,24,26,28」の数字から5つランダムで取り出すにはどのような書き方をすればよいのでしょうか? ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 配列の分割について

    下記のような配列グループが多数あるのですが、配列を2個づつ分割し、最初の2つのitem4の値だけを表示したいのですが、 例えば以下のようにarray_chunkを使って分けてからforeachで回して値を取り出すとNotice: Undefined indexエラーが出ます。(一応目的の「0 1」の値は出るのですが・・) このエラーは何が原因なのでしょうか。邪魔で仕方ありません。 <?php $food["0"]["item0"]="y"; $food["0"]["item1"]="bi"; $food["0"]["item2"]="5"; $food["0"]["item3"]="2012010100"; $food["0"]["item4"]="0"; $food["1"]["item0"]="y"; $food["1"]["item1"]="dou"; $food["1"]["item2"]="4"; $food["1"]["item3"]="2012010102"; $food["1"]["item4"]="1"; $food["2"]["item0"]="n"; $food["2"]["item1"]="co"; $food["2"]["item2"]="3"; $food["2"]["item3"]="2012010101"; $food["2"]["item4"]="2"; $food2 = array_chunk( $food, 2,true); foreach($food2 as $key1=>$array){ foreach($array as $key2=>$array2){ echo $food2["0"]["$key2"]["item4"]; } } ?>

    • ベストアンサー
    • PHP
  • 配列の表示について

    すいません。下記の配列で [item4]の値(k1~k3)だけを全て表示する方法というのは どうするのでしょうか?わざわざ下記のようにキーを書かなければならないのでしょうか? item4の値だけ一気に表示させたいのですが・・。 echo $food["0"]["item4"]; echo $food["1"]["item4"]; echo $food["2"]["item4"]; $food[]=array("item0"=>"y","item3"=>"2012010101","item4"=>"k1"); $food[]=array("item0"=>"y","item3"=>"2012010104","item4"=>"k2"); $food[]=array("item0"=>"n","item3"=>"2012010105","item4"=>"k3");

    • ベストアンサー
    • PHP
  • array_rand関数

    現在、ランダム関数を使用して、配列にある値の中から ランダムにいくつかの配列を抜き出す処理を行っています。 $rand_keys = array_rand($id,2); for($k=0;$k<count($rand_keys);$k++){  $rand_id[$i][$k]=$id[$rand_keys[$k]]; } ただし、この関数では一つだけ取り出したい場合には使えません。 何かよい方法はありませんか??

    • ベストアンサー
    • 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
  • 特殊文字をHTMLエンティティに変換する処理

    下記の処理とhtmlspecialchars関数との違いはなんですか? 2次元配列がよくわかりません。 function entity_assoc_array($assoc_array) { foreach ($assoc_array as $key => $value) { foreach ($value as $keys => $values) { // 特殊文字をHTMLエンティティに変換する $assoc_array[$key][$keys] = entity_str($values); } } return $assoc_array; }

    • ベストアンサー
    • PHP
  • 多次元配列でキーを基準に並び変えする

    すいません。多次元配列でキーを基準に並び変えを行いたいのですが、解説サイトやここでの質問で も解決せず困っています。以下が実際の配列で四次元目の2012010101~2012010107の数字を昇順、 降順で並び変え、k1~k4の値を結果として表示したいのですが、phpでは不可能なのでしょうか? 散々調べましたが、多次元配列の値で並び替えるというのは見つけたのですが、私が行いたいのは あくまでキーの数字で並び変えです。 詳しい方いましたらアドバイスいただければ助かります $food["y"]["bi"]["1"]["2012010101"]= "k1"; $food["y"]["ko"]["2"]["2012010104"]= "k2"; $food["n"]["dou"]["3"]["2012010105"]= "k3"; $food["y"]["dou"]["4"]["2012010106"]= "k4"; $food["n"]["bi"]["5"]["2012010107"]= "k5";

    • ベストアンサー
    • PHP

専門家に質問してみよう