我有一个从服务器端生成的对象数组,我想在PHP中过滤重复的…
下面是生成的数组array:5 [▼
0 => {#204 ▼
+"category_name": "Fashion"
+"category_id": "fashion"
}
1 => {#205 ▼
+"category_name": "Fashion"
+"category_id": "fashion"
}
2 => {#209 ▼
+"category_name": "Shirts"
+"category_id": "shirts"
}
3 => {#210 ▼
+"category_name": "Health"
+"category_id": "health"
}
4 => {#211 ▼
+"category_name": "Shirts"
+"category_id": "shirts"
}
]
这里数组0和1,数组2和数组4有相同的值,如何过滤和获得只有一个值的重复在现有的数组或新生成的数组
通过查看您的数据,似乎可以通过比较ONE属性的唯一性来过滤对象数组。如果是这种情况,在处理非常大的数组时,比较单个属性要比将每个对象转换为字符串并进行比较有效得多。
这个函数应该返回一个唯一属性的对象:
function returnUniqueProperty($array,$property) {
$tempArray = array_unique(array_column($array, $property));
$moreUniqueArray = array_values(array_intersect_key($array, $tempArray));
return $moreUniqueArray;
}
$uniqueObjectsById = returnUniqueProperty($yourArray, 'category_id');
解释:
- 我们传入我们的函数,数组,以及您想要执行的列的属性名称的"唯一性";比较。 然后我们使用php的
- 然后我们使用
array_unique()
过滤掉临时数组中的任何重复项。关键是,默认情况下,这将删除重复项,但保留每个唯一属性值的原始索引位置。php.net - 现在,我们只需要用
array_intersect_key()
将我们唯一的属性值数组的索引位置与原始数组的索引位置相匹配。php.net - 最后,我们想要"压缩"我们的数组,因此我们使用
array_values()
,它返回一个新的数组,并按数字顺序添加新的索引。php.net
array_column()
函数返回一个只包含我们想要比较的属性的数组。这个数组将具有与原始数组相同的索引值。php.net 使用array_unique()
PHP函数:
我有同样的问题。在array_unique中添加SORT_REGULAR之后,它就可以为我工作了。
array_unique($objectArray, SORT_REGULAR)
//comment start:: Dont change "returnUniqueProperty" function
function returnUniqueProperty($array,$property) {
$tempArray = array_unique(array_column($array, $property));
$moreUniqueArray = array_values(array_intersect_key($array, $tempArray));
return $moreUniqueArray;
}
//comment end::
$uniqueObjectsById = returnUniqueProperty($yourArray, 'category_id');
// "yourArray" replace with your arrayname
//"category_id" is property to filter:: in your case "category_id"