【问题标题】:PHP de-duplicate keys in different objects in arrayPHP删除数组中不同对象中的重复键
【发布时间】:2011-06-20 20:52:01
【问题描述】:

我有一个包含一系列对象的数组,我想搜索对象以比较和删除重复项。结构的一个例子是:

Array
(
    [0] => stdClass Object
        (
            [lrid] => 386755343029
            [uu] => website.address.com
        )

    [1] => stdClass Object
        (
            [lrid] => 386755342953
            [uu] => website.address.com
        )
)

UU 键是一个网站地址,我只想显示第一个版本而不是重复版本。任何帮助将不胜感激。

【问题讨论】:

    标签: php foreach loops


    【解决方案1】:
    $sites = array();
    foreach ($array as $object) {
      if (!array_key_exists($object->uu, $sites)) {
        $sites[$object->uu] = $object;
      }
    }
    

    如果您想要一个“普通数组”,请使用 array_values()$sites 作为参数。

    【讨论】:

      【解决方案2】:

      如果对象相同,您应该可以简单地调用 array_unique($array);

      http://us2.php.net/manual/en/function.array-unique.php

      如果对象不同但只有相同的 id,你可以实现 __toString() 方法(注意前面的两个下划线)并让它返回 (string)$this->id;这将导致 array_unique 函数(转换为字符串)调用您实现的魔法方法并仅获取对象的 id。

      无论如何,您可能必须实现魔术方法以确保 array_unique 在尝试将您的对象转换为字符串时不会失败,我不记得了。

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 2021-10-26
        • 1970-01-01
        • 2018-07-22
        • 2018-01-18
        • 1970-01-01
        • 2016-04-18
        • 1970-01-01
        • 2016-05-09
        相关资源
        最近更新 更多