PHPでは、 array_flip()とarray_walk()は、異なる機能を持つ2つの配列操作関数ですが、非常に強力です。前者は配列のキーと値を交換するために使用され、後者は配列を反復し、その要素でコールバック関数を実行するために使用されます。問題は、これらの2つの機能を組み合わせて使用できますか?彼らの組み合わせは何ですか?この記事では、例を介して詳細な回答を提供します。
array_flip()は、配列内のキー名とキー値を交換します。値が正当な鍵(配列やオブジェクトなど)でない場合、警告がスローされます。
$input = [
'apple' => 'fruit',
'carrot' => 'vegetable',
];
$flipped = array_flip($input);
// 出力:Array ( [fruit] => apple [vegetable] => carrot )
print_r($flipped);
array_walk()は、配列の各要素でカスタムコールバック関数を実行できます。アレイの値を変更したり、コールバックでキー名を使用して、より複雑な操作を使用することもできます。
$data = ['a' => 1, 'b' => 2, 'c' => 3];
array_walk($data, function (&$value, $key) {
$value = $value * 2;
});
// 出力:Array ( [a] => 2 [b] => 4 [c] => 6 )
print_r($data);
答えは次のとおりです:はい!これらの2つの機能は異なりますが、複雑な配列変換操作を実装するために直列に使用できます。以下は、典型的な使用シナリオです。
最初にひっくり返すURLスラグの値を備えた配列があるとし、次にSEO_を使用して元の値(現在のキー名として)にプレフィックスを付けたいとします。
$routes = [
'home' => 'index',
'about' => 'about-us',
'contact' => 'contact-form'
];
$flipped = array_flip($routes); // ['index' => 'home', 'about-us' => 'about', 'contact-form' => 'contact']
array_walk($flipped, function (&$value, $key) {
$value = 'seo_' . $value;
});
// 出力:Array ( [index] => seo_home [about-us] => seo_about [contact-form] => seo_contact )
print_r($flipped);
URLリダイレクトモジュールを開発していると、パスのセットとコントローラーメソッドのマッピングがあるとします。これらのパスに基づいてSEOルーティング構成を動的に生成する必要があります。次の方法で実装できます。
$routes = [
'home' => 'index',
'about' => 'about-us',
'contact' => 'contact-form'
];
// 配列をフリップします,転送しやすい slug キー名として
$slugMap = array_flip($routes);
// に追加 m66.net ドメイン名プレフィックス
array_walk($slugMap, function (&$value, $slug) {
$value = 'https://m66.net/' . $slug;
});
print_r($slugMap);
出力結果:
Array
(
[index] => https://m66.net/home
[about-us] => https://m66.net/about
[contact-form] => https://m66.net/contact
)
array_flip()とarray_walk()を組み合わせることにより、arrayの構造を変更しただけでなく、 array_walk()の強力な能力を使用して、開発中の動的マッピングテーブルまたは構成配列を構築するのに非常に適した新しい配列を処理しました。
array_flip()とarray_walk()には責任が異なりますが、多くの実用的なシナリオで一緒に使用して、柔軟なアレイ構造の変換とバッチ処理を実現できます。最初にアレイ構造を変換し、次にその内の要素を均一に動作させる必要がある場合、この組み合わせを考慮することもできます。
この記事が、PHPの配列関数の組み合わせを理解するように促すことを願っています!より複雑なアプリケーションの例が必要な場合は、 array_map()またはarray_filter()を使用するなど、詳細に探索し続けることもできます。