我想删除以下数组的重复项。我想按第一个值分组,然后重建索引。
即
Array
(
[0] => Array
(
[title] => California
[state_id] => 1
)
[1] => Array
(
[title] => California
[state_id] => 1
)
[2] => Array
(
[title] => New Mexico
[state_id] => 2
)
[3] => Array
(
[title] => Washington
[state_id] => 3
)
[4] => Array
(
[title] => Montana
[state_id] => 4
)
[5] => Array
(
[title] => Montana
[state_id] => 4
)
)
自
Array
(
[0] => Array
(
[title] => California
[state_id] => 1
)
[2] => Array
(
[title] => New Mexico
[state_id] => 2
)
[3] => Array
(
[title] => Washington
[state_id] => 3
)
[4] => Array
(
[title] => Montana
[state_id] => 4
)
)
和重建密钥
Array
(
[0] => Array
(
[title] => California
[state_id] => 1
)
[1] => Array
(
[title] => New Mexico
[state_id] => 2
)
[2] => Array
(
[title] => Washington
[state_id] => 3
)
[3] => Array
(
[title] => Montana
[state_id] => 4
)
)
$array = array_values(array_combine(array_map(function ($i) { return $i['title']; }, $array), $array));
即
- 解压缩
title
密钥 (array_map
( - 使用提取的标题作为新数组的键,并将其与旧数组(
array_combine
(组合在一起,这会消除数组的重复数据(键必须是唯一的( - 通过
array_values
运行结果,这会丢弃键
细分:
$keys = array_map(function ($i) { return $i['title']; }, $array);
$deduped = array_combine($keys, $array);
$result = array_values($deduped);
对于 PHP 5.2- 你需要像这样编写匿名回调函数:
array_map(create_function('$i', 'return $i["title"];'), $array)
- 按标题对数组进行排序(usort 可以解决问题(
- 创建一个新的空数组
- 循环原始数组并将找到的值存储在新的空数组中
- 如果下一个数组值等于最后一个,则跳过它
在此结束时,您拥有所需的数组.
还有另一种方法:
- 按标题对阵列进行排序
- 循环原始阵列
- 如果此数组值等于最后一个,则取消设置它
- 使用 PHP 排序功能再次对数组进行排序以重建键
$array = array_unique($array)
;
是的,它也适用于多维数组;它只是检查相等。