【发布时间】:2021-07-24 23:48:06
【问题描述】:
我有以下关联的对象数组:
[
0: {
"score": "value2",
"number": "1",
"finalScore": "-1"
},
1: {
"score": "value3",
"number": "2",
"finalScore": "5"
},
2: {
"score": "value4",
"number": "2",
"finalScore": "5"
},
3: {
"score": "value5",
"number": "3",
"finalScore": "-1"
}
]
请记住,以下格式是浏览器上的美化 JSON 字符串,通过echo json_encode($result)从 PHP 返回它之后@
我需要根据number 属性值对其进行过滤,以便删除number 属性除了第一个之外具有相同值的所有重复项。这意味着如果两个或多个对象共享相同的 number 值,则应该只保留第一个。
鉴于此解释,上例中过滤后的数组将导致:
[
0: {
"score": "value2",
"number": "1",
"finalScore": "-1"
},
1: {
"score": "value3",
"number": "2",
"finalScore": "5"
},
2: {
"score": "value5",
"number": "3",
"finalScore": "-1"
}
]
我已经做了几次尝试,我最接近的是这个功能:
function array_iunique($array) {
$lowered = array_map('strtolower', $array);
return array_intersect_key($array, array_unique($lowered));
}
【问题讨论】:
-
您尝试过什么,向我们展示您的最佳尝试(代码),您可能比您想象的更接近解决方案。请阅读How to Ask。
-
@berend 当然,我已经用我最接近的尝试进行了编辑。谢谢。
-
定义“除了第一个”(这似乎很重要)。这是否意味着如果密钥
number: 1重复,则不应删除其重复项?或者数组中位置 0 的任何键?另外,您实际使用的是什么结构?那是数组、对象还是 JSON 字符串的数组? -
你确定这些是 PHP 对象吗?在实际对象上调用
strtolower应该会引发警告。
标签: php array-filter