配列の要素の値をループ中に変更して確認したいのですが、下記やり方では、なぜダメなのでしょうか?
$arr = array("値1", "キー1" => "値2", "値3");
foreach($arr as $key => $val){
$arr[$key] = "-{$val}-";
echo $val."<br />";
}
foreach($arr as $key => $val){
echo "<br />".$val;
}
上のforeachの結果が、下と同じようになると期待したのですが、うまくいきません。
なんで、上のforeachと下のforeachの結果が異なるのでしょうか?
foreach文で要素の値が更新されるのは、foreach文が終了した瞬間なのでしょうか。
それとも、値はすぐに更新されているけれども、foreach文の処理(順番に抽出する作業?)は既にスタートしてしまっているので、ループ中に更新されても、途中で反映することはできない、ということなのでしょうか?
さっぱり分からないので、誰か教えてください。
「配列の要素の値をループ中に変更して確認したい」というよりは、
「なんで、二つのforeach文で結果が異なるか知りたい」です。
No.1ベストアンサー
- 回答日時:
上のforeachでは、$arr[$key]の内容を$valにコピー(値渡し)しているに過ぎないからです。
C言語でいうポインタ(参照渡し)ではありません。
上のforeachでは、下記のような流れになります。
1)$arr[$key]の内容を$valにコピー。
2)$arr[$key]の内容を"-{$val}-"に書き換え。
3)$valを表示。
4)$keyをインクリメントして1)へ戻る
よって、上のforeachでは書き換え前の値が表示されます。
下のforeachでは、書き換えられた後の配列を表示しているため、2)でセットした値が表示されるはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- Java Java 南京錠 2 2023/02/04 11:46
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPの構文で間違えが分からない
-
行列
-
PHPでCSVを出力するさいに、ル...
-
ファイルの逆読みってできますか?
-
While文を使って配列の中身を全...
-
ログファイルの古い日付の行を...
-
スカラーのベクトル微分
-
C言語の配列をPush(追加)する...
-
サイト名を取得するPHP
-
比較関数とSQL
-
行数が30万件ほどあるCSVから、...
-
Pager::factory()の使い方がわ...
-
プログラミングのPythonのnoteb...
-
SimpleXML関数で取得したXML要...
-
配列を回すとき、最後の要素だ...
-
MySQLのデータをPHPで多次元...
-
PHP5でCSVの指定行データだけを...
-
foreachの値をメール本文に表示...
-
配列をループでたくさん宣言し...
-
ファイルの書き込みについて教...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPでこのコード自体に意味は無...
-
マッチング処理(1:N)
-
foreachで上限回数指定方法また...
-
PHP、{}記号の意味
-
PHPで変数名にハイフンを使うに...
-
PHPで連想配列のプルダウンメニ...
-
VB.NET で 二次元のハッシュは...
-
配列からプルダウン用のHTMLを生成
-
多次元配列を、1次元の配列にす...
-
Smartyでインクリメント
-
phpでforeachの中にforeachがあ...
-
Excel VBAでフィルター後の対象...
-
foreachとかの勝手な省略?
-
foreachで配列を、左から縦3列...
-
$_POST受信で必要項目のみを結...
-
POSTで渡されるデータの数がわ...
-
リストボックス複数選択抽出方法
-
ftokが動かない?
-
foreachの間にテーブルの<TR>を...
-
3つの連想配列を交互に代入し...
おすすめ情報