phpのarray_intersect関数が無効な場合の解決方法は何ですか?

array_intersect()関数が機能しない場合、次の理由が考えられます。

  1. 配列をマッピングする。
$array1 = ['1', '2', '3'];
$array2 = [2, 3, 4];

$array1 = array_map('intval', $array1);

$result = array_intersect($array1, $array2);
print_r($result);
  1. 配列内の値はオブジェクトであり、オブジェクトの比較は値ではなく参照によって行われます。オブジェクトの属性値を比較したい場合は、匿名関数をカスタマイズすることで実現できます。
class Item {
    private $id;

    public function __construct($id) {
        $this->id = $id;
    }

    public function getId() {
        return $this->id;
    }
}

$item1 = new Item(1);
$item2 = new Item(2);
$item3 = new Item(3);

$array1 = [$item1, $item2];
$array2 = [$item2, $item3];

$result = array_intersect($array1, $array2);
print_r($result); // []

$result = array_uintersect($array1, $array2, function($a, $b) {
    return $a->getId() <=> $b->getId();
});
print_r($result); // [$item2]

同じデータ型を比較し、必要に応じて適切な比較関数を使用してください。

bannerAds