欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

php数组函数相关内容

程序员文章站 2022-04-25 15:53:19
...

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 );