![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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ランキング
-
Smartyでインクリメント
-
多次元配列の中で条件に合う要...
-
Delphi XEの警告文を消したい
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
楽天トラベルで「京都の宿」が...
-
読み(あ行~わ行)ごとに分け...
-
CArrayの要素としてCStringArra...
-
PHPでCSVの一部の行を編集したい
-
C言語の配列をPush(追加)する...
-
rubyで複数列のデータを一行に...
-
forとかで連番の変数を一気に格...
-
ヒアドキュメントの中のfor文
-
配列をループでたくさん宣言し...
-
行列
-
String だと「 ByRef引数の型が...
-
While文を使って配列の中身を全...
-
PHP SimpleXml unsetについて
-
PHPにてクラスを配列にすること...
-
複数行のデータのPOST処理に関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複確認
-
foreachで上限回数指定方法また...
-
マッチング処理(1:N)
-
Excel VBAでフィルター後の対象...
-
VB.NET で 二次元のハッシュは...
-
多次元配列を、1次元の配列にす...
-
SELECT 使用時の bindValue の...
-
Smartyでインクリメント
-
PHPでこのコード自体に意味は無...
-
PHP、{}記号の意味
-
配列を比較して同じものがあっ...
-
phpでforeachの中にforeachがあ...
-
多次元配列の中で条件に合う要...
-
sqlのデーターを『あ行』『か行...
-
ラジオボタンをランダムに表示...
-
キーが倍数の時の値の存在チェ...
-
三重県南部の温泉
-
foreachで配列を、左から縦3列...
-
ジャグ配列
-
構造体の中でユーザー定義型の...
おすすめ情報