Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较两个对象数组以查找匹配项_Php_Mysql - Fatal编程技术网

Php 比较两个对象数组以查找匹配项

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

我试图找出比较两个不同对象数组的最佳方法。两个阵列的结构相同。e、 g:

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的建议。谢谢