我有一个从服务器端生成的对象数组,我想在 PHP 中过滤重复项...
\n\n下面是生成的数组
\n\narray:5 [\xe2\x96\xbc\n 0 => {#204 \xe2\x96\xbc\n +"category_name": "Fashion"\n +"category_id": "fashion"\n }\n 1 => {#205 \xe2\x96\xbc\n +"category_name": "Fashion"\n +"category_id": "fashion"\n }\n 2 => {#209 \xe2\x96\xbc\n +"category_name": "Shirts"\n +"category_id": "shirts"\n }\n 3 => {#210 \xe2\x96\xbc\n +"category_name": "Health"\n +"category_id": "health"\n }\n 4 => {#211 \xe2\x96\xbc\n +"category_name": "Shirts"\n +"category_id": "shirts"\n }\n]\nRun Code Online (Sandbox Code Playgroud)\n\n这里数组 0 和 1、数组 2 和数组 4 具有相同的值,如何过滤并仅获取现有数组或新生成的数组中的重复项的单个值。
\n通过查看您的数据,您似乎可以通过比较一个属性的唯一性来过滤对象数组。如果是这种情况,那么在处理非常大的数组时,比较单个属性会更有效,而不是本质上将每个对象转换为字符串并以这种方式进行比较。
这是一个应该返回一个属性唯一的对象的函数:
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');
Run Code Online (Sandbox Code Playgroud)
解释:
array_column()函数返回一个仅包含我们想要比较的属性的数组。该数组将具有与原始数组相同的索引值。php.netarray_unique()过滤掉临时数组中的任何重复项。至关重要的是,默认情况下,这将删除重复项,但保留每个唯一属性值的原始索引位置。php.netarray_intersect_key(). php.netarray_values()返回一个新数组,该数组具有按数字顺序排列的新索引。php.net