Php 比较两个对象数组以查找匹配项
我试图找出比较两个不同对象数组的最佳方法。两个阵列的结构相同。e、 g:Php 比较两个对象数组以查找匹配项,php,mysql,Php,Mysql,我试图找出比较两个不同对象数组的最佳方法。两个阵列的结构相同。e、 g: Array ( [0] => stdClass Object ( [f_name] => Luis [id] => 1 [rank] => 1 ) [1] => stdClass Object ( [f_name] => Eden [id] => 2 [rank
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
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
查询2个较小的结果集
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
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
这非常有效,因为一旦将其交给前端控制器,它不会弄乱任何限制和偏移量。我认为数组相交将是一种方式。- 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
)
将DB用法作为条件展开,或者join可能会这样做。从表1中选择*,其中表1.id不在表2的选择id中?事实上,@MarcB与该注释非常吻合。我真的不知道如何把它作为一个答案。这里的礼仪是什么?我需要添加到我自己的问题中来回答它吗?@MarcB可以添加它作为答案,或者你可以。我试图使用array_intersect,但无法使它与我的对象数组很好地配合,我没有想到这样做会破坏我的分页。所以我最终听从了MarcB的建议。谢谢