PHP開発では、多次元アレイから特定のキー値をフィルタリングする必要性に遭遇することがよくあります。この記事では、2つの関数array_diff()とarray_keys()を組み合わせて、この関数を優雅かつ効率的に達成する方法を紹介します。
array_keys()
配列内のすべてのキー名を返し、指定されたキー値フィルタリングをサポートします。
array_diff()
2つ(またはそれ以上)の配列の違いを計算し、最初の配列で値を返しますが、他の配列では返されません。
これら2つの機能を組み合わせることにより、最初に配列のすべてのキー名を取得し、次に違いを通して不必要なキーを排除し、最後にフィルタリングされた配列を再生できます。
次の構造を持つ多次元配列があるとします。
$data = [
[
'id' => 1,
'name' => 'Alice',
'age' => 25,
'city' => 'Beijing',
],
[
'id' => 2,
'name' => 'Bob',
'age' => 30,
'city' => 'Shanghai',
],
];
各サブアレイの年齢と都市のフィールドを除外し、 IDと名前のみを残したいと考えています。
<?php
$data = [
[
'id' => 1,
'name' => 'Alice',
'age' => 25,
'city' => 'Beijing',
],
[
'id' => 2,
'name' => 'Bob',
'age' => 30,
'city' => 'Shanghai',
],
];
// 除外する必要があるキー名
$keysToRemove = ['age', 'city'];
$result = [];
foreach ($data as $item) {
// 現在の配列のすべてのキーを取得します
$keys = array_keys($item);
// 保持するキーを計算します,今 $keys そして $keysToRemove 差分セット
$filteredKeys = array_diff($keys, $keysToRemove);
// 予約キーでサブアレイを再構築します
$filteredItem = [];
foreach ($filteredKeys as $key) {
$filteredItem[$key] = $item[$key];
}
$result[] = $filteredItem;
}
print_r($result);
Array_keys($ item)を介して現在のサブアレイのすべてのキー名を取得します。
array_diff()を使用して、保持するキー、つまり、削除するキーセットを差し引いた元のキーセットを差し引いたキーを計算します。
フィルタリングされたキー名を反復し、新しい配列を再組み立てします。
最後に、 $ resultはフィルタリングされた多次元配列です。
Array
(
[0] => Array
(
[id] => 1
[name] => Alice
)
[1] => Array
(
[id] => 2
[name] => Bob
)
)
array_diff()とarray_keys()の組み合わせにより、多次元配列から指定されたキー値を迅速かつ柔軟に除外できます。この方法は非常に用途が広く、さまざまな複雑な配列構造の処理に適しています。フィルタリングするキーが増えるか、アレイレベルがより深くなっている場合は、再帰処理のための関数にカプセル化することもできます。