'foreach' ループでの参照動作: 配列の変更を理解する
PHP では、'foreach' ループ内で参照を使用すると、予期しないエラーが発生する可能性があります配列の変更。この動作は次のコードで強調表示されています:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
このコードが生成する出力は予期せぬものです:
Array ( [0] => a [1] => b [2] => c [3] => c )
ステップバイステップの説明
この動作を理解するには、「foreach」の各反復中に発生する変更を追跡することが不可欠です。ループ:
- 最初の反復 (参照反復): $v は $a[0] ('a') への参照です。
- 2 回目の反復 (参照反復): $v は $a[1] への参照です('b').
- 3 回目の反復 (参照反復): $v は $a[2] ('c') への参照です。
- 4 回目の反復 (参照反復): $v は $a[3] への参照です('d').
最初の 'foreach' ループ (参照の反復) が完了しても、$v は $a[3] ('d') への参照を保持しています。
- 最初の反復 (値の反復): $v (まだ $a[3] を参照) には、次の値が割り当てられます。 $a[0] ('a')。ただし、$v は参照であるため、$a[3] を 'a' に変更します。
- 2 番目の反復 (値の反復): $v (まだ $a[3] を参照しています) ) には $a[1] ('b') の値が割り当てられます。これにより、再び $a[3] が 'b' に変更されます。
- 3 回目の反復 (値の反復): $v (まだ $a[3] を参照) には、$a の値が割り当てられます。 [2] ('c')。これにより、$a[3] がもう一度 'c' に変更されます。
- 4 回目の反復 (値の反復): $v (まだ $a[3] を参照) には、$ の値が割り当てられます。 a[3] ('c').
したがって、2 番目の 'foreach' ループ (値の反復) の後、配列 $a は、'c' が 2 回出現するように変更されています。
問題の解決
この予期しない動作を回避するには、反復ごとに参照の設定を解除することをお勧めします。 :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
これにより、期待される出力が得られます:
Array ( [0] => a [1] => b [2] => c [3] => d )
以上がPHP の「foreach」ループで参照を使用すると、予期しない配列変更が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

メモ帳++7.3.1
使いやすく無料のコードエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ホットトピック



