0

次の配列があるとします。

$array[0]['tid'] = 'valueX';
$array[1]['tid'] = 'valueY';

$array2[0]['tid'] = 'valueZ';
$array2[1]['tid'] = 'valueY';

私の目標は、値のいずれかが含まれているかどうかを確認すること$arrayです$array2

以下は私が思いついたものですが、より簡単でより良い解決策があるかどうか疑問に思っていますか? 'tid'配列の値のみを取得するか、キーを削除するものかもしれません。

foreach($array as $arr) {
    $arr1[] = $arr['tid'];
}

$flag = 0;

foreach($array2 as $arr) {
    if( in_array( $arr['tid'], $arr1 ) ) {
        $flag++;
    }
}
echo $flag; // number of duplicates
4

3 に答える 3

3

これにアプローチできる1つの方法:

$extractor = function($row) { return $row['tid']; };
echo "Duplicates: ".count(array_intersect(
    array_map($extractor, $array),
    array_map($extractor, $array2)
));

これが行うことは、両方の配列の各配列要素から値を引き出しtid、結果を交差させます (両方の配列に存在する値を見つけるため)。正確に何をしようとしているかに応じて、少し調整するか、中間結果を維持することが理にかなっています。

実際に見てください

于 2012-09-18T11:38:47.437 に答える
1

array_mapを使用して、配列から値を引き出すことができます。

変換された配列は、in_array関数でループできます。より良いのは、両方の変換された配列に共通の要素を返すarray_intersectを使用することです。

また、配列をフラット化すると、迅速で汚い解決策が得られる場合がありますが、PHPには(私の知る限り)リンクされた投稿にはいくつかのバリエーションがあります。

于 2012-09-18T11:38:16.980 に答える
0

投稿したコードと一致する数が必要な場合は、機能します

array_mapを使用して値を取得してみてください

array_map(function($array){return $array['tid']}, $inputArray())

于 2012-09-18T11:40:20.553 に答える