ホームページ > バックエンド開発 > PHPチュートリアル > PHPで別の2D配列との交差に基づいて2D配列から行をフィルタリングする方法は?

PHPで別の2D配列との交差に基づいて2D配列から行をフィルタリングする方法は?

Linda Hamilton
リリース: 2024-10-26 06:24:30
オリジナル
696 人が閲覧しました

How to Filter Rows from a 2D Array Based on Intersection with Another 2D Array in PHP?

行交差に基づいた 2D 配列の行のフィルタリング

PHP の array_diff_assoc() 関数は、キーと値の優先順位を付けながら 2 つの配列間の差異を見つけるように設計されています。ペア。ただし、この関数を使用して別の 2D 配列との交差に基づいて 2D 配列から行をフィルタリングすると、必ずしも期待した結果が得られるとは限りません。

問題の理解

問題は次の原因で発生します。 array_diff_assoc() によって実行される厳密な比較。比較中にキーと値のペアの文字列表現を比較します。これは、2 つのキーと値のペアに同じ値が含まれている場合でも、その文字列表現が同一でない限り、それらは等しいとはみなされないことを意味します。

サンプル データ

次のサンプル データについて考えてみましょう:

<code class="php">$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 = [
    [11 => 'common set']
];</code>
ログイン後にコピー

間違った出力

array_diff_assoc() を使用して $array2 の行に基づいて $array1 をフィルターしようとすると、間違った出力が得られます:

<code class="php">$output = array_diff_assoc($array1, $array2);

print_r($output);
// Output: [
//     [11 => 'common set']
// ]</code>
ログイン後にコピー

This出力には共通の行が結果に存在することが示されていますが、意図した出力には $array1 の排他的な行が含まれている必要があります。

問題の原因

前述したように、問題はarray_diff_assoc() によって厳密な比較が実行されます。次の 2 つの配列を比較する場合:

<code class="php">Array ( [0] => "Array" [1] => "Array" )
Array ( [0] => "Array" )</code>
ログイン後にコピー

キーと値のペアは文字列が同一ではないため、関数は結果として異なるキーと値のペアを返します。

正しいアプローチ

この問題に対処するには、配列内の特定のキーと値の存在をチェックする少し異なるアプローチを使用できます。

<code class="php">$filteredRows = array_filter($array1, function($row) use ($array2) {
    return !in_array($row, $array2);
});

print_r($filteredRows);
// Output: [
//     [12 => 'new q sets']
// ]</code>
ログイン後にコピー

このアプローチでは、in_array() を使用して各行が存在するかどうかをチェックします。 $array1 の内容は $array2 に存在します。 $array2 に行が存在しない場合、その行はフィルタリングされた結果に含まれます。

以上がPHPで別の2D配列との交差に基づいて2D配列から行をフィルタリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート