現在の位置: ホーム> 最新記事一覧> array_diff() + array_keys()を使用して、キーを多次元配列でフィルタリングします

array_diff() + array_keys()を使用して、キーを多次元配列でフィルタリングします

M66 2025-06-06

PHP開発では、多次元アレイから特定のキー値をフィルタリングする必要性に遭遇することがよくあります。この記事では、2つの関数array_diff()array_keys()を組み合わせて、この関数を優雅かつ効率的に達成する方法を紹介します。

1。関数の紹介

  • array_keys()
    配列内のすべてのキー名を返し、指定されたキー値フィルタリングをサポートします。

  • array_diff()
    2つ(またはそれ以上)の配列の違いを計算し、最初の配列で値を返しますが、他の配列では返されません。

これら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);

コード解析:

  1. Array_keys($ item)を介して現在のサブアレイのすべてのキー名を取得します。

  2. array_diff()を使用して、保持するキー、つまり、削除するキーセットを差し引いた元のキーセットを差し引いたキーを計算します。

  3. フィルタリングされたキー名を反復し、新しい配列を再組み立てします。

  4. 最後に、 $ resultはフィルタリングされた多次元配列です。

4。操作結果

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )
)

5。概要

array_diff()array_keys()の組み合わせにより、多次元配列から指定されたキー値を迅速かつ柔軟に除外できます。この方法は非常に用途が広く、さまざまな複雑な配列構造の処理に適しています。フィルタリングするキーが増えるか、アレイレベルがより深くなっている場合は、再帰処理のための関数にカプセル化することもできます。