相关疑难解决方法(0)

为什么 array_unique 不检测重复对象?

我似乎无法弄清楚 PHP 场景背后发生了什么魔法以及为什么array_unique无法检测到我的重复项。

在我的特定情况下,我有 2 个用户集合,我将它们合并为一个,然后只保留唯一的条目。为此,我将两个集合都转换为数组,array_merge()然后根据参数 applyarray_unique(..., SORT_REGULAR)将它们作为对象进行比较,而无需进行任何转换。我意识到比较对象是一个滑坡,但在这种情况下,它比我更奇怪。

合并后但在唯一性检查之前我有这个状态: 在此处输入图片说明

如您所见,第 4 项和第 11 项是同一个 User 实体(非严格比较和严格比较都同意这一点)。然而,array_unique()由于某种原因,他们都留在列表中之后: 在此处输入图片说明

如您所见,项目 7-10 被检测到并被删除,但 11 则没有。

这怎么可能?我在这里看不到什么?

当前运行 PHP 7.4.5

代码来自使用 Symfony 4.4.7 和 Doctrine ORM 2.7.2 的项目(尽管我认为这应该无关紧要,如果对象在比较=====比较时相等)。

奖励积分的有趣事实 -array_unique连续申请两次实际上会产生独特的结果: 在此处输入图片说明

头脑=吹

更新:throw new \RuntimeException()在我的User::__toString()方法中添加了,以确保没有人在进行字符串转换。

请不要建议转换为字符串 - 这既不是我的问题的解决方案,也不是这个问题的内容。

php

9
推荐指数
1
解决办法
629
查看次数

array_unique也可以用于对象数组吗?

有没有比使用array-walk和unserialize更好的方法?

我有两个包含对象的数组.对象可以相同也可以不同.我想合并两个数组并只保留唯一对象.

在我看来,这对于一些如此微不足道的事情来说是一个很长的解决方案.还有其他方法吗?

class Dummy
{
    private $name;
    public function __construct($theName) {$this->name=$theName;}
}

$arr = array();
$arr[] = new Dummy('Dummy 1');
$arr[] = new Dummy('Dummy 2');
$arr[] = new Dummy('Dummy 3');

$arr2 = array();
$arr2[] = new Dummy('Dummy 1');
$arr2[] = new Dummy('Dummy 2');
$arr2[] = new Dummy('Dummy 3');

function serializeArrayWalk(&$item)
{
    $item = serialize($item);
}

function unSerializeArrayWalk(&$item)
{
    $item = unserialize($item);
}

$finalArr = array_merge($arr, $arr2);
array_walk($finalArr, 'serializeArrayWalk');
$finalArr = array_unique($finalArr);
array_walk($finalArr, 'unSerializeArrayWalk');

var_dump($finalArr);
Run Code Online (Sandbox Code Playgroud)

php arrays duplicate-removal

6
推荐指数
0
解决办法
2381
查看次数

从数组中删除重复的对象?

我一直在使用array_unique从数组中删除重复值,但是当值是对象时它似乎不起作用 - stdClass的实例.

php arrays

5
推荐指数
0
解决办法
1747
查看次数

如何在PHP中删除对象数组中的重复项?

我有一个像这样的对象:

class FanStruct{
    public $date; 
    public $userid;

    function __construct($date, $id){
        $this->date = $date;
        $this->userid = $id;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在一个数组中最多有30个,它们按照排序$userid.

通过数组的最佳方法是什么,并根据$userid(忽略$date)删除重复的对象?

php arrays

2
推荐指数
1
解决办法
4074
查看次数

PHP从数组中删除重复的对象

我已经尝试了各种各样的PHP逻辑和PHP的内置函数来删除重复的值,但它不工作没有错误显示但是如果用于array_unique() in_array()删除我的数组中的重复对象,我的所有JQuery和CSS都不起作用

这就是我person_row_array在while循环中创建的方式:

$person_row = Person::findByID($pi_claimant_row->person_id);
$person_row_array[] = $person_row;
Run Code Online (Sandbox Code Playgroud)

对象print_r如下:

Array
(
[0] => stdClass Object
    (
        [id] => 12
        [flat_no] => 
        [house_no] => *
        [street] => 
        [town] => 
        [postcode] => *
        [county] => 
    )

[1] => stdClass Object
    (
        [id] => 14
        [flat_no] => 2
        [house_no] => 33
        [street] => Street
        [town] => Town
        [postcode] => BB
        [county] => County
    )

[2] => stdClass Object
    (
        [id] => 14
        [flat_no] => 2
        [house_no] => 33 …
Run Code Online (Sandbox Code Playgroud)

php arrays object duplicate-removal

1
推荐指数
2
解决办法
4752
查看次数

标签 统计

php ×5

arrays ×4

duplicate-removal ×2

object ×1