簡體   English   中英

比較兩個對象數組以查找匹配項

[英]Compare two arrays of objects to find matches

我試圖找出比較兩個不同對象數組的最佳方法。 兩個陣列的結構相同。 例如:

Array
(
[0] => stdClass Object
    (
        [f_name] => Luis
        [id] => 1
        [rank] => 1
    )

[1] => stdClass Object
    (
        [f_name] => Eden
        [id] => 2
        [rank] => 2
    )

[2] => stdClass Object
    (
        [f_name] => Robin
        [id] => 4
        [rank] => 3
    )

[3] => stdClass Object
    (
        [f_name] => Wayne
        [id] => 3
        [rank] => 4
    )
)

第一個數組中大約有600個對象,第二個數組中有可變數量的對象。 我不想遍歷較小的數組並從較大的數組中取消任何匹配,但這是我想到的唯一方法。 有沒有更好的辦法?

當我從數據庫(mySQL)中提取代碼時,會有更好的方法嗎? 我意識到這是一個單獨的問題,因此如果普遍的共識是在那做,我會相應地問它。

編輯

作為對評論的回應,查詢非常笨拙,我簡化了返回的對象,但這是要點:

查詢1(更大的結果集)

SELECT `players`.`f_name`, `players`.`id`, `default_rankings`.`rank` FROM `default_rankings` 
LEFT JOIN `players` ON `players`.`id` = `default_rankings`.`player_id` 
ORDER BY `default_rankings`.`rank` asc

查詢2(較小的結果集)

SELECT `players`.`f_name`, `players`.`id`, `player_rankings`.`rank` FROM `player_rankings` 
LEFT JOIN `players` ON `players`.`id` = `player_rankings`.`player_id` 
WHERE `player_rankings`.`user_id` = '1' 
ORDER BY `player_rankings`.`rank` asc

編輯

在@MarcB的評論之后,我將第一個查詢更改為:

SELECT `players`.`f_name`, `players`.`id`, `default_rankings`.`rank` FROM  `default_rankings` 
LEFT JOIN `players` ON `players`.`id` = `default_rankings`.`player_id`
WHERE `players`.`id` NOT IN (SELECT `player_id` FROM `user_rankings` WHERE `user_id` = '1') 
ORDER BY `default_rankings`.`rank` asc

這很好用,因為一旦交給前端控制器,它不會破壞任何限制和偏移。

我認為array_intersect()將是必經之路。 http://www.php.net/manual/zh-CN/function.array-intersect.php-

PHP文檔中的示例-

$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);

// output
Array
(
    [a] => green
    [0] => red
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM