こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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>";
?>

投稿日時 - 2012-09-17 19:06:58

QNo.7702909

困ってます

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

>if(in_array("n",array_keys($key1))) unset($food[$key][$key2]);

この if での$key1は$food["y"]や$food["n"]です。それを「配列」としてin_arrayでチェックするということは、$food["y"]["n"]や$food["n"]["n"]が存在するかどうかをチェックしています。




というか、これなら($food["n"]以下を削除するだけなら)

if (array_key_exists("n", $food)) { unset($food["n"]); }

だけでいいのでは?

投稿日時 - 2012-09-17 20:54:44

お礼

array_keysに対する思い違いをしていました、array_key_existsを使えばよさそうです。
ありがとうございました。

投稿日時 - 2012-09-17 23:46:48

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問