php二維數組去除重復值


<?php
//二維數組
$test["aa"] = array("id"=>"17","name"=>"汽車");
$test["bb"] = array("id"=>"18","name"=>"飛機");
$test["cc"] = array("id"=>"19","name"=>"高鐵");
$test["dd"] = array("id"=>"19","name"=>"飛機");

//去除二維數組重復值,默認重復保留前面的值
/*
  *array 二維數組
  *keyid 需要判斷是否重復的項目
  *desc 為true時保留后面的
*/
function array_repeat($array,$keyid="id",$desc=false)
{
	$array = array_values($array);
	//倒敘排列數
	if($desc)
	{
		$array = array_rsort($array,true);
	}
	
	//提取需要判斷的項目變成一維數組
	$a = array_tq($array,$keyid);
	
	//去除一維數組重復值
	$a = array_unique($a);
	//提取二維數組項目值
	foreach($array[0] AS $key=>$value)
	{
		$akey[] = $key;
	}
	//重新拼接二維數組
	foreach($akey AS $key=>$value)
	{
		$b = array_tq($array,$value);
		foreach($a AS $key2=>$value2)
		{
			$c[$key2][$value] = $b[$key2];
		}
	}
	
	if($desc)
	{
		$c = array_rsort($c,true);
	}
	return $c;
}

//數組倒敘
function array_rsort($arr,$isvalues=false)
{
	if(is_array($arr)){
		$flag = false;
		//一維數組
		if(count($arr) == count($arr,1)){
			$flag = true;
			$i = 0;
			//轉換成二維數組
			foreach($arr AS $key=>$value){
				$a[$i]["okey"] = $key;
				$a[$i]["value"] = $value;
				$i++;
			}
			$arr = $a;
		}
		//多維數組
		else
		{
			//添加臨時key值
			foreach($arr AS $key=>$value){
				$value["okey"] = $key;
				$array[] = $value;
			}
			$arr = $array;
		}
		
		//倒敘並還原key值
		$count = count($arr)-1;
		for($i=0;$i<count($arr);$i++){
			$b[$arr[$count]["okey"]] = $arr[$count];
			$count--;
		}
		
		//重構一維數組
		if($flag == true){
			foreach($b AS $key=>$value){
				if($isvalues){
					$c[] = $value["value"];
				}else{
					$c[$value["okey"]] = $value["value"];
				}
			}
		}
		//多維數組去除臨時key值
		else
		{
			foreach($b AS $key=>$value)	{
				unset($value["okey"]);
				if($isvalues){
					$c[] = $value;
				}else{
					$c[$key] = $value;
				}
			}
		}
		return $c;
	}
}

//提取二維數組項目
function array_tq($array,$aval="")
{
	foreach($array AS $key=>$value)
	{
		$result[] = $value[$aval];
	}
	return $result;
}

//去除id相同的項
var_dump(array_repeat($test,"id"));
var_dump(array_repeat($test,"id",true));

echo "----------------------------------------";

//去除name相同的項
var_dump(array_repeat($test,"name"));
var_dump(array_repeat($test,"name",true));
?>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM