[英]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.