https://oshiete.goo.ne.jp/qa/9714215.html
で質問したのですが、疑問点を絞りましたので質問し直します。
例えば次の場合、
「echo "<br>";」よりも上の方が正しくて下は問題があることは分かります。
内側のforeachの前では外側のforeachの$keyになりますが、
内側のforeachの後では内側のforeachの$keyになってしまいます。
結果の0-A abc の後が0-Aではなく2-Cになってしまった所です。
ここまでは当然だと理解できるのですが、
内側のforeachの前に戻った時に外側のforeachの$keyに戻る仕組みが分かりません。
結果の2-Cの後が3-Dではなく1-Bに戻っている所です。
この理由について、どなたか、分かりやすく解説していただけないでしょうか。
よろしくお願いします。
<?php
$name = array("A","B","C","D");
$list = array("a","b","c");
foreach ($name as $key1 => $val1) {
echo $key1."-".$name[$key1]."<br>";
foreach ($list as $key2 => $val2) {
echo $list[$key2];
}
echo "<br>".$key1."-".$name[$key1]."<br>";
}
echo "<br>";
foreach ($name as $key => $val) {
echo $key."-".$name[$key]."<br>";
foreach ($list as $key => $val) {
echo $list[$key];
}
echo "<br>".$key."-".$name[$key]."<br>";
}
exit;
?>
結果:
0-A
abc
0-A
1-B
abc
1-B
2-C
abc
2-C
3-D
abc
3-D
0-A
abc
2-C
1-B
abc
2-C
2-C
abc
2-C
3-D
abc
2-C
No.1ベストアンサー
- 回答日時:
> 結果の2-Cの後が3-Dではなく1-Bに戻っている
foreachで配列を走査するのにキーは使われていません。
配列は内部ポインタというものをもっていて、現時点のカレント位置を保持します
foreachによって次のポインタに移ったときに再度$keyが読み直されます
一方、forで回す場合は$iなど配列とは直接関係ないカウンタを使うため、
$iが上書きされてしまうと挙動がおかしくなります
yambejpさん、引き続き回答していただき、ありがとうございました。
「内部ポインタ」という言葉を理解せずに使っていました。
改めて検索して調べてみました。
おかげ様で疑問点が解消しました。
私のプログラムが問題なく動作していたことが疑問だったのですが、
ようやく納得しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
連想配列のキー値(連番)を基...
-
Excel VBAでフィルター後の対象...
-
PHP、{}記号の意味
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
関数をの引数について。
-
リストボックス複数選択抽出方法
-
foreachとかの勝手な省略?
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
配列をループでたくさん宣言し...
-
ヒアドキュメントの中のfor文
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
PHPで多次元配列を一度に処理す...
-
phpの関数について質問です!
-
While文を使って配列の中身を全...
-
配列データのMySQLへの登録
-
phpのin_array()でわからない事...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マッチング処理(1:N)
-
smartyのforeachの使い方
-
foreachで上限回数指定方法また...
-
多次元配列を、1次元の配列にす...
-
foreachの間にテーブルの<TR>を...
-
PHP、{}記号の意味
-
$_POST受信で必要項目のみを結...
-
3つの連想配列を交互に代入し...
-
VB.NET で 二次元のハッシュは...
-
PHP:ツリー構造をulとli要素に...
-
foreachで配列を、左から縦3列...
-
PHPの構文で間違えが分からない
-
PHPで連想配列のプルダウンメニ...
-
添え字が全て文字列のPHPの多次...
-
POSTで渡されるデータの数がわ...
-
テーブルデータ表示
-
Smartyでインクリメント
-
PHPで変数名にハイフンを使うに...
-
Delphi XEの警告文を消したい
-
配列から順位を算出したい
おすすめ情報