本文共 2963 字,大约阅读时间需要 9 分钟。
在实际开发中,常常会遇到需要处理具有多值数组的场景。PHP的array_unique函数只能处理单值数组,这使得直接使用该函数来处理多值数组变得不够灵活。本文将详细介绍如何处理这种场景,并提供一个高效的解决方案。
传统的array_unique函数在处理具有多值的数组时会遇到问题。例如,以下数组:
$arr = array( '0' => array('name' => 'james', 'age' => 30), '1' => array('name' => 'susu', 'age' => 26), '2' => array('name' => 'james', 'age' => 30), 'new' => array('name' => 'kube', 'age' => 37), 'list' => array('name' => 'kube', 'age' => 27), '435' => array('name' => 'susu', 'age' => 26), '33' => array('name' => 'james', 'age' => 30),); 如果直接使用array_unique,由于每个元素都是一个数组,函数无法区分数组的内容,因此无法实现预期的去重效果。
为了实现对多值数组的去重,可以使用自定义函数more_array_unique。该函数通过以下步骤实现去重:
implode函数将数组降维成一维字符串。array_unique函数对降维后的字符串数组进行去重。以下是具体实现代码:
function more_array_unique($arr = array()) { $arr_inner_key = array(); foreach ($arr[0] as $k => $v) { $arr_inner_key[] = $k; } $temp = array(); foreach ($arr as $k => $v) { $v = implode(",", $v); $temp[$k] = $v; } $temp = array_unique($temp); foreach ($temp as $k => $v) { $a = explode(",", $v); $arr_after[$k] = array_combine($arr_inner_key, $a); } return $arr_after;} 通过对上述函数进行测试,我们可以验证其有效性。假设输入以下测试数组:
$arr = array( '0' => array('name' => 'james', 'age' => 30), '1' => array('name' => 'susu', 'age' => 26), '2' => array('name' => 'james', 'age' => 30), 'new' => array('name' => 'kube', 'age' => 37), 'list' => array('name' => 'kube', 'age' => 27), '435' => array('name' => 'susu', 'age' => 26), '33' => array('name' => 'james', 'age' => 30),); 调用函数后,输出结果如下:
array( '0' => array('name' => 'james', 'age' => 30), '1' => array('name' => 'susu', 'age' => 26), 'new' => array('name' => 'kube', 'age' => 37), 'list' => array('name' => 'kube', 'age' => 27)); 可以看到,重复的记录已被成功去重。
为了更直观地展示功能效果,可以参考以下完整的实现代码:
array('name' => 'james', 'age' => 30), '1' => array('name' => 'susu', 'age' => 26), '2' => array('name' => 'james', 'age' => 30), 'new' => array('name' => 'kube', 'age' => 37), 'list' => array('name' => 'kube', 'age' => 27), '435' => array('name' => 'susu', 'age' => 26), '33' => array('name' => 'james', 'age' => 30),);function more_array_unique($arr = array()) { $arr_inner_key = array(); foreach ($arr[0] as $k => $v) { $arr_inner_key[] = $k; } $temp = array(); foreach ($arr as $k => $v) { $v = implode(",", $v); $temp[$k] = $v; } $temp = array_unique($temp); foreach ($temp as $k => $v) { $a = explode(",", $v); $arr_after[$k] = array_combine($arr_inner_key, $a); } return $arr_after;}$arr_new = more_array_unique($arr);echo "原来的数组:
";print_r($arr);echo " ";echo "去除重复元素后的数组:
";print_r($arr_new);echo " ";?> 以上代码不仅展示了函数的实现,还提供了完整的测试案例,能够清晰地展示函数的效果。
转载地址:http://zptfk.baihongyu.com/