php数组函数相关内容

1、php删除两个数组中相同的元素;

(1)删除$arr1中存在,其他数组中也存在的元素;

$arr11 = array(1, 2, 3, 4);
$arr12 = array(2, 4);

$arr13 = array_diff($arr11,$arr12);

print_r($arr13);   // Array ( [0] => 1 [2] => 3 );

$arr14 = array_diff($arr12,$arr11);

print_r($arr14);   // Array ( )
(2)$a和$b,即删除$a中存在于$b的元素,删除$b中$a存在的元素,组后合并返回;

$arr1 = array(1,2,3);
$arr2 = array(2,3,4);

$arr3 = array_merge(array_diff($arr1,$arr2),array_diff($arr2,$arr1));

print_r($arr3);  // Array ( [0] => 1 [1] => 4 );
$aaa = array(1,2,3,4);

$bbb = array(1,3,5,7);

$newarr = array();

// 两个数组的并集,所有元素组合成一个数组;

foreach($bbb as $keys => $values){
	
	if(!in_array($values,$aaa,true)){
		
		$aaa[] = $values; 
	}
}
print_r($aaa);    // $bbb = array(1,3,5,7);


// 两个数组元素的交集,两个数组均有的元素组成一个新的数组;

foreach($bbb as $keys => $values){
	
	if(in_array($values,$aaa,true)){
		
		$newarr[] = $values; 
	}
}

print_r($newarr);    // Array ( [0] => 1 [1] => 3 );

2、php如何将数组重复元素替换为空值?;

//如array('a','a','b','c','d','d','d');   变成array('a',' ','b','c','d',' ',' ');

//方法1 、利用array_fill()和 + 函数以及ksort(按照健值进行排序);

$arr1 = array('a','a','b','c','d','d','d'); 

$count = count($arr1);

$arr2 = array_fill(0,$count,' ');

$temparr = array_unique($arr1);     // Array ( [0] => a [2] => b [3] => c [4] => d ) 

$endarr = $temparr + $arr2;

ksort($endarr);

//print_r($endarr);

// 方法2; 利用for循环;

$arr4 = array();

for($i = 0;$i < $count; $i++){
	
	if(array_key_exists($i,$temparr)){
		
		continue;
	}
	
	$temparr[$i] = ' ';
}

ksort($temparr);

//print_r($temparr);

3、php数组中相同的元素合并;

$arr9 = array(1,2,2,4);    //  转变成 array(1,array(2,2),4);  就是将原数组中,相同的元素组合成一个数组,当做子元素;

$arrres = array();

$temp = array_count_values($arr9);


foreach($temp as $keys => $values){
	
	$arrres[] = $values > 1 ? array_fill(0,$values,$keys) : $keys;
	
}

print_r($arrres);

4、php中 随机生成5个数字,然后对数组进行低到高的排序;

$arr = array();
while(count($arr)<5){
	
	$arr[] = rand(1,10);
	$arr = array_unique($arr);
}

sort($arr);
print_r($arr);

5、如何使用php生成唯一ID的4种方法

// 方法1:

$numbers = range (1,50); 
//shuffle 将数组顺序随即打乱 
shuffle ($numbers); 
//array_slice 取该数组中的某一段 
$num=6; 
$result = array_slice($numbers,0,$num); 
print_r($result); 

// 方法2:

$numbers = range (1,20); 
//播下随机数发生器种子,可有可无,测试后对结果没有影响
srand ((float)microtime()*1000000); 
shuffle ($numbers); 
//跳过list第一个值(保存的是索引)
while (list(, $number) = each ($numbers)) { 
echo "$number "; 
} 

// 方法3:

function NoRand($begin=0,$end=20,$limit=5){ 
$rand_array=range($begin,$end); 
shuffle($rand_array);//调用现成的数组随机排列函数 
return array_slice($rand_array,0,$limit);//截取前$limit个 
} 
print_r(NoRand()); 

// 方法4:

$tmp=array(); 
while(count($tmp)<5){ 
$tmp[]=mt_rand(1,20); 
$tmp=array_unique($tmp); 
} 
print_r($tmp);

// 方法5:

$tmp = range(1,30);
print_r(array_rand($tmp,10));

6、提取字符串中相同的字符;

$aaa = '90pil8a94riqp';     // 提取其中相同的字符,计算并得到结果:9pi ?

$strres = '';

$arrayaaa = str_split($aaa);

$tempaaa = array_count_values($arrayaaa);

foreach($tempaaa as $keys => $values){
	
	if($values > 1){
		
		$strres .= $keys;	
	}
}

echo $strres;
$tid='1,2,2,4,4,5';  //重组字符串中相同的元素,即$tid变为'1,2,4,5'; 急急急!!!

$arraytid = explode(',',$tid);

$arraytid = array_unique($arraytid);

$restid = implode(',',$arraytid);

echo $restid;

7、编程实现具有相同功能的php数组函数;

// array_count_values();  统计数组中的元素出现的次数;

// $aaa = array('a','c','w','d','b','m','a','c','w','a','c');  // Array ( [a] => 3 [c] => 3 [w] => 2 [d] => 1 [b] => 1 [m] => 1 );

// 函数1:

function arrcount1($aaa){
	
	$bbb = array();
	
	foreach($aaa as $keys => $values){
		
		if(array_key_exists($values,$bbb)){
			
			$bbb[$values] += 1;
			
		}else{
			
			$bbb[$values] = 1;
		}
	}
	
	return $bbb;
}

// 函数2:

function arrcount2($aaa){
	
	$ccc = array_unique($aaa);
    $straaa = implode('',$ccc);
	$arr = array();
     	
	for($i=0,$len=strlen($straaa);$i<$len;$i++){
		
		$dange = substr($straaa,$i,1);
		
		str_replace($dange,'aaaa',$aaa,$num);
        $arr[$dange] = $num;		
	}
	return $arr;
}

// 函数3:

function arrcount3($aaa){
	
	$res = array();
	$weiyi = array_unique($aaa);
	
	foreach($weiyi as $keys => $values){
		
		$res[$values] = 0;
	}
	
	foreach($aaa as $ks => $vs){
		$res[$vs] += 1;
	}
	return $res;
}

// 函数4:

function arrcount4($aaa){
	
	$resarr = array();
	$arruin = array_unique($aaa);
	foreach($arruin as $values){
		
		$resarr[$values] = 0;
		foreach($aaa as $vs){
			if($values === $vs){
				$resarr[$values]++;
			}
		}
	}
	return $resarr;
}


// 函数5:

function arrcount5($aaa){
	
	$arr = array();
	while(count($aaa)>0){
		
		$b = array_shift($aaa);
		$arr[$b] = 1;
		
		foreach($aaa as $keys => $values){
			
			if($b === $values){
				$arr[$b]++;
				unset($aaa[$keys]);
			}
		}
	}
	return $arr;
}
// array_reverse(); 数组反转函数; 第二个参数如果设置成ture,则保持健名不变;

$aaa = array('a' => '春','b' => '夏','c' => '秋','d' => '冬');

// 函数1:利用指针的移动;

function arr_reverse1($aaa){
	
	$resarr = array();
	end($aaa);
	
	while(key($aaa) !== null){
		
		$resarr[key($aaa)] = current($aaa);
		prev($aaa);
	}
	
	return $resarr;
}


// 函数2:利用array_pop()弹出,赋值;

function arr_reverse2($aaa){

    $newarr = array();
    while(count($aaa)>0){
		
		end($aaa);
		$keys = key($aaa);
		$v = array_pop($aaa);
		
		$newarr[$keys] = $v;
	}
    return $newarr;
}
print_r(arr_reverse2($aaa));
// array_combine():创建一个数组,两个数组中,其中一个数组的元素作为健,另外一个数组的元素作为值;

// 注意:此时只对原数组中,健都是数自并从0依次开始的能用;

$aaa = array('春','夏','秋','冬');

$bbb = array('暖','热','凉','冷');

$newarr = array();

$aaalen = count($aaa);

for($i = 0;$i < $aaalen;$i++){
	
	$newarr[$aaa[$i]] = $bbb[$i];
}

print_r($newarr);
// array_column(): 返回数组中,指定的列;

$records = array(
					array(
						'id' => 2135,
						'first_name' => 'John',
						'last_name' => 'Doe',
					),
					array(
						'id' => 3245,
						'first_name' => 'Sally',
						'last_name' => 'Smith',
					),
					array(
						'id' => 5342,
						'first_name' => 'Jane',
						'last_name' => 'Jones',
					),
					array(
						'id' => 5623,
						'first_name' => 'Peter',
						'last_name' => 'Doe',
					)
                );

$newarr = array();				
				
foreach($records as $keys => $values){
	
	$newarr[$values['id']] = $values['first_name'];
	
}
print_r($newarr);
// array_search(): 在数组中,查找指定的值,如果值在数组中,则返回 第一个 值对应的健,否则返回false;

$aaa = array(0 => 'php', 1 => 'mysql', 2 => 'java', 3 => 'html');

function arr_search($search,$aaa){
	
	$find = false;
	
	foreach($aaa as $keys => $values){
		
		if($search === $values){
			
			$find = $keys;
			break;             // 碰到第一个值,则直接结束,返回值;
		}
		
	}
	
	return $find;
}


// 备注:

// in_array(): 判断、检查数组中是否存在某值; if(in_array(值,数组,(类型));

// array_keys():  返回数组中 部分或者 所有的健名; (数组,(值对应的健),(类型));
// array_unique():数组去重;

$aaa = array('a','c','w','a','c','w','a','c','d','b','m'); 

function arr_unique($aaa){
	
	$newarr = array();
	
	foreach($aaa as $keys => $values){
		
		if(in_array($values,$newarr)){
			
			unset($aaa[$keys]);
		}else{
			$newarr[$keys] = $values;    // 数组去重后,健名保持不变;
		}
	}
	
	return $newarr;
}
// 二维数组去重;

$aaa = array(array('a','b'),array('a','c'),array('a','b'),array('b','c'));

function d2unique($aaa){
	
	$newarr = array();
	foreach($aaa as $keys => $values){
		
		$strtem[] = implode('_',$values);
	}
	
	$temunique = array_unique($strtem);
	foreach($temunique as $ks => $vs){
		
		$newarr[$ks] = explode('_',$vs);
	}
	
	return $newarr;
}
// 其他方法实现数组去重;

// 1、arary_flip():只能翻转字符串或者整数;

$aaa = array('zhangsan','1.1',1,'lisi',2,'3.2','wangwu','zhangsan',5);

//print_r(array_unique($aaa)); // Array( [0] => zhangsan [1] => 1.1 [2] => 1 [3] => lisi [4] => 2 [5] => 3.2 [6] => wangwu [8] => 5 );

$tempaaa = array_flip($aaa);

print_r($tempaaa);   // Array ( [zhangsan] => 7 [1.1] => 1 [1] => 2 [lisi] => 3 [2] => 4 [3.2] => 5 [wangwu] => 6 [5] => 8 );

print_r(array_flip($tempaaa));   // Array ( [7] => zhangsan [1] => 1.1 [2] => 1 [3] => lisi [4] => 2 [5] => 3.2 [6] => wangwu [8] => 5 )

//  注意: 此时翻转去重回来的数组健名,比较凌乱,可以对健名进行修复;

print_r(array_merge(array_flip($tempaaa)));  //Array ( [0] => zhangsan [1] => 1.1 [2] => 1 [3] => lisi [4] => 2 [5] => 3.2 [6] => wangwu [7] => 5 );



//  方法2: 先翻转,再取出所有的健名;

print_r(array_keys($tempaaa));    // Array ( [0] => zhangsan [1] => 1.1 [2] => 1 [3] => lisi [4] => 2 [5] => 3.2 [6] => wangwu [7] => 5 );








猜你喜欢

转载自blog.csdn.net/prdslf001001/article/details/79267686