我有一个从服务器端生成的对象数组,我想在 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 具有相同的值,如何过滤并仅获取现有数组或新生成的数组中的重复项的单个值。
通过查看您的数据,您似乎可以通过比较一个属性的唯一性来过滤对象数组。如果是这种情况,那么在处理非常大的数组时,比较单个属性会更有效,而不是本质上将每个对象转换为字符串并以这种方式进行比较。
这是一个应该返回一个属性唯一的对象的函数:
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_column()
函数返回一个仅包含我们想要比较的属性的数组。该数组将具有与原始数组相同的索引值。php.net https://www.php.net/manual/en/function.array-column
- 然后我们使用
array_unique()
过滤掉临时数组中的任何重复项。至关重要的是,默认情况下,这将删除重复项,但保留每个唯一属性值的原始索引位置。php.net https://www.php.net/manual/en/function.array-unique.php
- 现在,我们只需将唯一属性值数组的索引位置与原始数组的索引值进行匹配,即可
array_intersect_key()
. php.net https://www.php.net/manual/en/function.array-intersect-key
- 最后,我们想要“压缩”我们的数组,所以我们
array_values()
,它返回一个新数组,其中包含按数字顺序排列的新索引。php.net https://www.php.net/manual/en/function.array-values
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)