foreach や for などのステートメントに基づく単純な配列走査については以前に説明しましたが、ここでは、開発に非常に役立つ、強力な実用的なパフォーマンスを備えた配列の高度な走査メソッドを紹介します。そしてより複雑です。
PHP の配列の処理は、この言語の最も魅力的な機能の 1 つと言えます。PHP は 70 を超える配列関連の関数をサポートしています。配列を反転したり、配列内に値が存在するかどうかを判断したり、配列を文字列に変換したり、配列のサイズを計算したりする場合は、既存の関数を実行するだけで実行できます。ただし、配列関連のタスクの中には、マニュアルで特定の機能を知っているだけでは解決できないものもあります。これらのタスクでは、問題を解決するには、PHP の本来の機能についての深い理解とある程度の想像力が必要です。 。 力。
多次元連想配列の並べ替え
PHP は、sort()、ksort()、asort() などのいくつかの配列ソート関数を提供しますが、多次元連想配列のソートは提供しません。
たとえば、次のような配列:
配列
(
[0] => 配列
(
[名前] =>チェス
[価格] => 12.99
)
[1] => 配列
(
[名前] =>チェッカーズ
[価格] => 9.99
)
[2] => 配列
(
[名前] => バックギャモン
[価格] => 29.99
)
)
コードをコピー | |||||||||||||||||||||||||||||||||||||||||
$priceA['価格'] - $priceB['価格']; を返します
}
|
関数 navigateArray($iterator) {
while ($iterator->valid()) {
Printf("%s: %s", $iterator->key(), $iterator->current()); このコードを実行すると、次の結果が得られます: 名前: ボード 連想配列の結果をフィルタリングする 配列 [1] => 配列 [2] => 配列 array_reduce() 関数を使用して簡単に実装できます。
array_reduce() 関数は、コールバック関数を満たさないすべての要素をフィルターで除外します。この例のコールバック関数は filterGames です。価格が 11.99 より低い要素はすべて保持され、その他は削除されます。このコード スニペットの実行結果: 配列 オブジェクトを配列に変換する
オブジェクトを配列に変換すると、予期しない副作用が生じる可能性があります。たとえば、上記のコード スニペットでは、すべてのメンバー変数はパブリック型ですが、プライベート変数の戻り結果は異なります。別の例を次に示します:
ご覧のとおり、区別するために、配列に保存されたプライベート変数のキーが自動的に変更されます。 配列の「自然な順序付け」
これが望ましい場合もありますが、元の添字を保持したい場合はどうすればよいでしょうか?この問題を解決するには、自然な方法で配列を並べ替える natsort() 関数を使用できます。
トラバーサル中の値変更操作
上記のコードの出力は次のとおりです: 配列 ( [A] => 2 [B] => 2 [C] => 2 [D] => 2 ) キー値を使用して配列の要素を操作します
出力を見ることについて心配する必要はありません。出力がどのようなものであるかを想像してください。変更された配列を出力し、「CHANGE」を出力して、変更された配列を再度出力します。そうですか?出力を見てみましょう! 配列 ([A] => CHANGE [B] => 1 [C] => 1 [D] => CHANGE ) 私たちのアイデアによれば、$array が変更されたため、キー値「D」を持つ要素に移動すると、その新しい値「CHANGE」が出力されるはずです。しかし、現実は私たちが思っているものではありません。 PHP はここで何をしたのでしょうか?上記のコードを少し変更します。配列を出力する場合は「D」=>CHANGEが正しいので、2番目のif文の判定条件を変更しましょう:
何が出力されると思いますか? $value は絶対に「CHANGE」と等しくありません。それは 1 に等しいですか?
すると、確かに1ですね。 その理由は何ですか? PHP ドキュメントの foreach ページに目を向けると、突然次のことに気づきました。 注: 配列が参照されない限り、foreach は配列自体ではなく、指定された配列のコピーを操作します。 foreach は配列ポインターにいくつかの副作用をもたらします。リセットされない限り、foreach ループ中またはループ後に配列ポインターの値に依存しないでください。 foreach は指定された配列のコピーを操作することがわかります。不思議ではありませんが、$value の取得は機能しません。これを理解すると、上記の問題は解決されます。 foreachであれば、キーに応じて$arrayの要素を直接取り出して、さまざまな判定や代入操作を行うことができます。
|