我正在尝试处理这些我从API动态获取的数据。我知道id
将始终是唯一的,但name
经常相互匹配,这是一个问题。使用PHP,我如何删除name
与此数组中前一个对象的name
值相同的任何stdClass对象?我特别希望检查从0进展到最高值,因为这些stdClass对象中还有其他数据。在这种情况下,我希望删除1
,因为其名称与0
的名称相匹配,但之后当前2
的内容应成为新的1
,原因很明显
Array
(
[0] => stdClass Object
(
[id] => 6969
[name] => Steve Jobs
)
[1] => stdClass Object
(
[id] => 2013
[name] => Steve Jobs
)
[2] => stdClass Object
(
[id] => 1234
[name] => The Woz
)
)
谢谢!
答案 0 :(得分:8)
您可以使用array_filter
执行此操作:
$objects = array(
(object)array('id' => 1, 'name' => 'test1'),
(object)array('id' => 2, 'name' => 'test2'),
(object)array('id' => 3, 'name' => 'test1'),
);
$known = array();
$filtered = array_filter($objects, function ($val) use (&$known) {
$unique = !in_array($val->name, $known);
$known[] = $val->name;
return $unique;
});
答案 1 :(得分:2)
您可以这样做:
$newArray = array();
foreach ($array as $value) { $newArray[$value->name] = $value; }
在该周期结束时,您将拥有一个数组,其中每个名称只会遇到一次(并且您将保留该名称的最新出现次数)。
答案 2 :(得分:-1)
我自己在http://seanmonstar.com/post/707138900/making-objects-in-an-array-unique
找到了解决方案将此功能放在顶部:
function unique_obj($obj) {
static $idList = array();
if(in_array($obj->id,$idList)) {
return false;
}
$idList []= $obj->id;
return true;
}
就在打印/回显数组之前:
$amazingPeople = array_filter($amazingPeople,'unique_obj');