以下是详细讲解PHP二维数组实现去除重复项的方法【保留各个键值】的攻略。
1. 问题概述
在开发中,经常会遇到需要将二维数组中的重复项去除的情况,例如,以下这个二维数组:
$users = [
['name' => 'John', 'age' => 20],
['name' => 'Mary', 'age' => 22],
['name' => 'John', 'age' => 20],
['name' => 'Peter', 'age' => 25],
['name' => 'Mary', 'age' => 22]
];
我们需要将其中的重复项去除,只保留其中一个,得到以下结果:
$unique_users = [
['name' => 'John', 'age' => 20],
['name' => 'Mary', 'age' => 22],
['name' => 'Peter', 'age' => 25]
];
另外,要求保留去除重复项前每个项对应的键值。
2. 解决方案
我们可以通过array_column函数和array_unique函数配合,实现去除重复项的操作。
array_column函数可以从二维数组中取出指定列的所有值,返回一维数组;array_unique函数可以对一维数组去除重复值,返回去除重复值后的新数组。
以下是代码示例:
$users = [
['name' => 'John', 'age' => 20],
['name' => 'Mary', 'age' => 22],
['name' => 'John', 'age' => 20],
['name' => 'Peter', 'age' => 25],
['name' => 'Mary', 'age' => 22]
];
$key = 'name'; // 指定列名,根据此列去重
$unique_users = [];
// 遍历原二维数组,将每一项$key列的值存入$column数组
$column = [];
foreach ($users as $value) {
$column[] = $value[$key];
}
// 对$column数组去重,得到去重后的新数组
$unique_column = array_unique($column);
// 遍历去重后的$unique_column数组,从原二维数组$users中取出对应项,存入$unique_users数组
foreach ($unique_column as $unique_value) {
foreach ($users as $user) {
if ($user[$key] == $unique_value) {
$unique_users[] = $user;
break; // 找到一项即可结束循环,避免重复添加
}
}
}
针对以上代码,我们来逐步解析一下:
- 指定列名,根据此列去重
这里通过在代码中新建一个$key变量,从而实现根据指定列去重的需求。
- 遍历原二维数组,将每一项$key列的值存入$column数组
在此步骤中,我们使用foreach循环,遍历原二维数组$users,用$value变量存储每一项。随后,我们用数组[]运算符将对应列的值存储在$column数组中,从而形成一个由这一列组成的一维数组。
- 对$column数组去重,得到去重后的新数组
此处直接使用了PHP内置函数array_unique,只需要将$column数组作为参数传入即可。
- 遍历去重后的$unique_column数组,从原二维数组$users中取出对应项,存入$unique_users数组
最后一步的操作也是基于foreach循环,遍历去重后的$unique_column数组。在其中嵌套了另一个foreach循环,用于在原二维数组$users中查询对应项,从而得到去重后的二维数据。
3. 代码示例
以下是一些案例,帮助您更好地理解如何应用上述攻略:
案例1
下面这个数组,我们需要根据“phone”列去重:
$data = [
['name'=>'Suse', 'phone'=>'123'],
['name'=>'Jack', 'phone'=>'789'],
['name'=>'Yara', 'phone'=>'345'],
['name'=>'Tom', 'phone'=>'123']
];
我们可以使用如下代码实现去重:
$key = 'phone';
$column = array_column($data, $key);
$unique_column = array_unique($column);
$unique_data = [];
foreach ($unique_column as $unique_value) {
foreach ($data as $item) {
if ($item[$key] == $unique_value) {
$unique_data[] = $item;
break;
}
}
}
案例2
下面这个数组,我们需要根据“email”列去重:
$data = [
['name'=>'Suse', 'email'=>'123@qq.com'],
['name'=>'Jack', 'email'=>'789@qq.com'],
['name'=>'Yara', 'email'=>'345@qq.com'],
['name'=>'Tom', 'email'=>'123@qq.com']
];
我们可以使用如下代码实现去重:
$key = 'email';
$column = array_column($data, $key);
$unique_column = array_unique($column);
$unique_data = [];
foreach ($unique_column as $unique_value) {
foreach ($data as $item) {
if ($item[$key] == $unique_value) {
$unique_data[] = $item;
break;
}
}
}
以上就是PHP二维数组实现去除重复项的方法【保留各个键值】的攻略和示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP二维数组实现去除重复项的方法【保留各个键值】 - Python技术站