PHP 中对数组去重且保持键名的最佳方法有两种:array_unique():可去重但不保留键名,重新索引数组。自定义函数 array_unique_preserve_keys():使用哈希值比较值,可去重并保留键名。

PHP 中对数组去重并保持键名的最佳方法
在 PHP 中,数组去重是指删除重复的值,同时保持键名不变。这在处理来自不同来源的可能包含重复元素的数据时非常有用,例如来自多个表单提交或数据库查询。
方法 1:array_unique()
array_unique() 函数是内置的 PHP 函数,用于对数组进行去重。它接受一个数组作为输入,并返回一个新的数组,其中重复的值已被删除。但是,array_unique() 不会保留键名,而是重新索引数组,从 0 开始。
示例:
1 2 3 4 5 | $arr = [ 'a' , 'b' , 'c' , 'c' , 'd' , 'e' , 'a' ];
$result = array_unique ( $arr );
print_r( $result );
|
登录后复制
方法 2:自定义函数
为了保持键名,我们可以编写一个自定义函数来对数组进行去重。此方法使用关联数组并比较每个值的哈希值来确定是否重复。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function array_unique_preserve_keys( $arr )
{
$hash = [];
$unique_arr = [];
foreach ( $arr as $key => $value )
{
$hash_value = md5( $value );
if (!isset( $hash [ $hash_value ]))
{
$hash [ $hash_value ] = 1;
$unique_arr [ $key ] = $value ;
}
}
return $unique_arr ;
}
$arr = [ 'a' , 'b' , 'c' , 'c' , 'd' , 'e' , 'a' ];
$result = array_unique_preserve_keys( $arr );
print_r( $result );
|
登录后复制
实战案例:
假设我们有一个来自表单提交的数组,其中包含重复的用户名和电子邮件地址。通过使用 array_unique_preserve_keys() 函数对其进行去重,我们可以移除重复记录,同时保持用户的用户名。
1 2 3 4 5 6 7 8 9 10 | $form_data = [
[ 'username' => 'john' , 'email' => 'john@example.com' ],
[ 'username' => 'jane' , 'email' => 'jane@example.com' ],
[ 'username' => 'john' , 'email' => 'john@example.org' ],
[ 'username' => 'mark' , 'email' => 'mark@example.net' ]
];
$unique_users = array_unique_preserve_keys( $form_data );
print_r( $unique_users );
|
登录后复制
以上是PHP 中对数组去重并保持键名的最佳方法的详细内容。更多信息请关注PHP中文网其他相关文章!