• PHP 中操作数组的知识点


    数组的赋值: PHP中的数组既可以做数组,也可以做键值对字典,且不存在限制,非常灵活.

    <?php
    	// 定义纯数组格式
    	$array_one[0] = 100;
    	$array_one[1] = 200;
    	$array_one[2] = "lyshark";
    	$array_one[3] = [1,2,3,4,5,6];
    	
    	echo $array_one[0] . $array_one[2] . "<br>";
    	echo "数组中的数组: " . $array_one[3][1] . "<br>";
    	
    	// 定义字典格式的数组
    	$array_two['ID'] = 1001;
    	$array_two['name'] = "lyshark";
    	$array_two['age'] = 25;
    	
    	echo "姓名: " . $array_two['name'] . "<br>";
    ?>
    

    数组的定义与遍历: 分别定义一维数组与二维数组,并通过两种方式分别遍历数组元素.

    <?php
    	// 定义一维数组
    	$var = array("first"=>1,"second"=>2,"third"=>3,"montd"=>4);
    	foreach ($var as $key => $value)
    	{
    		echo "键 => {$key} --> 值 => {$value} <br>";
    	}
    	
    	// 定义二维数组
    	$var_two = array(
    	"书籍" => array("文学","历史","地理"),
    	"水果" => array(1=>"苹果",2=>"橙子",3=>"水蜜桃"));
    	
    	foreach($var_two as $key => $value)
    	{
    		echo "键=" . $key . " ";
    		foreach($var_two[$key] as $index => $value)
    		{
    			echo "  索引: " . $index . " --> 值: " . $value;
    		}
    		echo "<br>";
    	}
    	
    	// 二维数组其他遍历方法
    	$array_two = array(
    	array('北京','上海','深圳','广州'),
    	array('黑龙江','吉林','辽宁','江苏'));
    	
    	for($x=0; $x< count($array_two); $x++)
    	{
    		for($y=0; $y<count($array_two[$x]); $y++)
    		{
    			echo "输出数组: " . $array_two[$x][$y] . "<br>";
    		}
    	}
    ?>
    

    数组元素统计: 统计出数组中指定元素的个数,或者统计每个元素出现的次数.

    <?php
    	// 一维数组统计
    	$lamp = array("Linux","Apache","MySQL","PHP");
    	echo "lamp 元素个数: " . count($lamp) . "<br>";
    
    	// 二维数组统计
    	$web = array(
    		'lamp' => array("Linux","Apache","MySQL","PHP"),
    		'j2ee' => array("Unix","Tomcat","Oracle"));
    		
    	echo "二维中一维个数: " . count($web) . "<br>";
    	echo "整个数组的大小: " . count($web,1) . "<br>";
    
    	// 统计元素出现次数,返回数组
    	$array = array("php","asp","jsp","php","python","node.js");
    	$new_array = array_count_values($array);
    	foreach($new_array as $key => $value)
    	{
    		echo "数组元素 => {$key} ---> 出现频率 => {$value} <br>";
    	}
    ?>
    

    二维数组遍历回显: 通过传统的循环结构遍历特定数组中的元素,并用表格展示出来.

    <?php
    	$data = array(
    		array(1,'admin','北京',"admin@blib.cn"),
    		array(2,'guest','天津',"guest@blib.cn"),
    		array(3,'lyshark','洛杉矶',"lyshark@blib.cn"));
    	
    	echo "<table border='1' width='600' align='center'>";
    	echo "<caption><h1>输出列表</h1></caption>";
    	echo "<tr bgcolor='#ddddddd'>";
    	echo "<th>编号</th><th>姓名</th><th>住址</th><th>邮箱</th>";
    	echo "</tr>";
    	
    	for($row=0; $row < count($data); $row++)
    	{
    		echo "<tr>";
    		for($clo=0; $clo<count($data[$row]); $clo++)
    		{
    			echo "<td>" . $data[$row][$clo] . "</td>";
    		}
    		echo "</tr>";
    	}
    	echo "</table>";
    ?>
    

    三维数组遍历回显: 由于FOR语句遍历数组的局限性,所以PHP中提供了更加强大的ForEach结构.

    <?php
    	$data = array(
    		"市场部" => array(array(1,"张某","经理",5000),array(2,"刘某","员工",3000)),
    		"销售部" => array(array(1,"李某","职员",2000),array(2,"孙某","经理",6000)),
    		"财务部" => array(array(1,"吴某","经理",8000))
    	);
    	
    	foreach($data as $sector => $table)
    	{
    		echo "<table border='1' width='600' align='center'>";
    		echo "<caption><h1>" . $sector . "</h1></caption>";
    		echo "<tr bgcolor='#ddddddd'>";
    		echo "<th>编号</th><th>姓名</th><th>职务</th><th>薪资</th>";
    		echo "</tr>";
    		
    		foreach($table as $row)
    		{
    			echo "<tr>";
    			foreach($row as $col)
    			{
    				echo "<td>" . $col . "</td>";
    			}
    			echo "</tr>";
    		}
    		echo "</table><br>";
    	}
    ?>
    

    指针操作数组: 数组内部指针式数组内部的组织机制,指向一个数组中的某个元素.

    <?php
    	$info = array('admin','guest','lyshark');
    	
    	// 将数组中所有的的元素转换为变量
    	list($x,$y,$z) = $info;
    	echo "变量: " . $x . $y . $z . "<br>";
    	
    	// 将数组中指定元素转换为变量
    	list(,,$z)= $info;
    	echo "变量: " . $z . "<br>";
    
    	// 数组指针操作
    	reset($info);
    	echo "元素索引: " . key($info) . "元素值: " . current($info) . "<br>";
    	next($info);
    	echo "元素索引: " . key($info) . "元素值: " . current($info) . "<br>";
    	prev($info);
    	echo "元素索引: " . key($info) . "元素值: " . current($info) . "<br>";
    	end($info);
    	echo "元素索引: " . key($info) . "元素值: " . current($info) . "<br>";
    	
    	// 通过指针循环遍历
    	for(reset($info); current($info);next($info))
    	{
    		echo "数据: " . current($info) . "<br>";
    	}
    ?>
    

    数组键值对操作: 数组中的每个元素都是由键值对组成的,通过元素的键访问对应的值.

    <?php
    	$info = array("ID" => 1001,"Name" => "admin","Age" => 24 );
    	$var1 = array("a"=>"python","b"=>"php","c"=>"C/C++","d"=>"java");
    	$var2 = array("1"=>"a","2"=>"b","3"=>"c","4"=>"d");
    	
    	// 获取所有的键值
    	print_r(array_keys($info));
    	print_r(array_values($info));
    	
    	// 获取特定的键
    	print_r(array_keys($info,"admin"));
    	
    	// 值作为新数组的键
    	$new = array_combine($var1, $var2);
    	print_r($new); echo"<br>";
    	
    	// extrace()将数组转换成标量变量
    	extract($var1);
    	echo $a."<br>";
    	echo $b."<br>";
    ?>
    

    判断键值是否存在: 检查特定数组中是否存在某个值,即在数组中搜索给定的值.

    <?php
    	// 函数的简单用法
    	$info = array("Mac","Windows NT","AIX","Linux");
    	if(in_array("Mac",$info))
    		echo "存在 <br>";
    	
    	// 严格模式,必须类型一致,否则失败
    	$info = array('10.24',12,45,1,2);
    	if(in_array(10.24,$info,true))
    		echo "存在 <br>";
    	
    	// 查询数组中的数组
    	$info = array(array(1,2),array(3,4));
    	if(in_array(array(3,4),$info))
    		echo "存在 <br>";
    	
    	// search 同样可以实现检索
    	$info = array("ID" => 1001,"Name" => "admin","Age" => 24 );
    	if(array_search("admin",$info))
    		echo "存在 <br>";
    	
    	// 检查下标元素是否在数组中
    	if(array_key_exists('ID',$info))
    		echo "存在 <br>";
    	
    	// 使用isset同理
    	if(isset($info['ID']))
    		echo "存在 <br>";
    ?>
    

    数组交换/统计/去重: 实现数组的交换,统计,与去重等操作.

    <?php
    	$info = array("OS" => "Linux","WebServer" => "Nginx", "DataBase" => "MySQL");
    	
    	// 交换数组中的键值
    	$new_info = array_flip($info);
    	
    	print_r($info); echo "<br>";
    	print_r($new_info); echo "<br>";
    	
    	// 数组元素反转
    	$new_info = array_reverse($info);
    	print_r($info); echo "<br>";
    	print_r($new_info); echo "<br>";
    	
    	// 统计元素个数
    	$var_count = count($info);
    	echo "元素个数: " . $var_count . "<br>";
    	
    	// 统计数组中所有元素出现次数
    	$array = array(1,2,3,3,2,4,5,6,6,7,7,7,6,8,7,4,3);
    	$array_count = array_count_values($array);
    	print_r($array_count); echo "<br>";
    	
    	// 数组元素去重操作
    	$array = array("1" => "PHP","2" => "MySQL","3" => "PHP");
    	print_r(array_unique($array));
    ?>
    

    数组回调与过滤: PHP提供了回调函数,可以实现对数组中元素的过滤功能,例如将每个元素递增10等.

    <?php
    	// array_filter 定义第一个回调函数
    	function EvenNumber($var)
    	{
    		if($var %2 ==0) return true;
    	}
    	$info = array(1,2,3,4,5,6,7,8,9,10);
    	print_r(array_filter($info,"EvenNumber"));echo "<br>";
    	
    	// array_walk 第二种回调函数的过滤写法
    	function PrintFunction($value,$key)
    	{
    		$value = $value + 10;
    		echo "KEY= " . $key . "  VALUE= " . $value . "<br>";
    	}
    	$info = array("UID" => 1001,"GID" => 0, "age"=> 25);
    	array_walk($info,"PrintFunction");
    	
    	// array_map 第三种回调函数过滤写法(可替换指定数组元素)
    	function ReplaceMap($var1)
    	{
    		if($var1 === "MySQL")
    			return "Oracle";
    		return $var1;
    	}
    	$info = array("Linux","Windows","Apache","MySQL","PHP");
    	print_r(array_map("ReplaceMap",$info));echo "<br>";
    	
    	// array_map 传递多个参数实现回调 (可用于对比多个数组的异同点)
    	function Contrast($var1,$var2)
    	{
    		if($var1 == $var2)
    			return "True";
    		return "False";
    	}
    	$Array_A = array("Linux","PHP","MySQL");
    	$Array_B = array("Linux","MySQL","MySQL");
    	print_r(array_map("Contrast",$Array_A,$Array_B));
    ?>
    

    基本的数组排序: 在PHP中提供了多种排序函数,相比于C来说更加的简单实用.

    <?php
    	// 对数组进行正反向排序
    	$info = array(5,6,8,2,7,8,9,0,2,1,3,4,5);
    	
    	if(sort($info))
    		echo "sort 正向排序:"; print_r($info);echo "<br>";
    	if(rsort($info))
    		echo "sort 反向排序:"; print_r($info);echo "<br>";
    	
    	// 根据key=>键名称来实现数组排序
    	$info = array(5 => "five",8 => "eight",1 => "one");
    	
    	if(ksort($info))
    		echo "ksort 正向排序:"; print_r($info);echo "<br>";
    	if(krsort($info))
    		echo "ksort 反向排序:"; print_r($info);echo "<br>";
    	
    	// 根据value=>值来实现数组排序
    	$info = array(5 => "five",8 => "eight",1 => "one");
    	
    	if(asort($info))
    		echo "asort 正向排序:"; print_r($info);echo "<br>";
    	if(arsort($info))
    		echo "asort 反向排序:"; print_r($info);echo "<br>";
    	
    	// 根据自然排序法对数组排序
    	$info = array("file1","file11","File2","FILE12","file");
    	
    	if(natsort($info))
    		echo "natsort 大写排在前面:"; print_r($info);echo "<br>";
    	if(natcasesort($info))
    		echo "natcasesort 忽略大小写自然排序:"; print_r($info);echo "<br>";
    ?>
    

    自定义/多维数组排序: 除了使用上面提供的排序方法以外,我们还可以自定义排序规则.

    <?php
    	// 回调函数实现自定义排序
    	$info = array("Linux","Apache","MySQL","PHP");
    	
    	function SortByLen($var1,$var2)
    	{
    		// 如果两个字符串长度一致则保留
    		if(strlen($var1) === strlen($var2))
    			return 0;
    		else
    			return (strlen($var1)>strlen($var2)?1:-1);
    	}
    	if(usort($info,"SortByLen"))
    		echo "自定义排序:"; print_r($info);echo "<br>";
    	
    	// 多维数组的排序方法
    	$info = array(
    		array("id" => 1,"soft" => "Linux","rating" => 8),
    		array("id" => 2,"soft" => "Apache","rating" => 1),
    		array("id" => 3,"soft" => "Nginx","rating" => 5)
    	);
    	
    	foreach($info as $key => $value)
    	{
    		// 将$info中每个元素中键为soft的值形成新数组$soft
    		$soft[$key] = $value["soft"];
    		$rating[$key] = $value['rating'];
    	}
    	
    	array_multisort($rating,$soft,$info); // 开始排序
    	echo "多维数组排序: "; print_r($info); echo "<br>";
    ?>
    

    拆分/合并/分解数组: 数组常用的处理函数,包括对数组进行拆分,合并,结合,等常用操作.

    <?php
    	// array_slice(数组,开始下标,取出个数) 在数组中根据条件取值并返回.
    	$info = array("Linux","PHP","Apache","MySQL","Nginx","Zabbix");
    	print_r(array_slice($info,1,2));echo "<br>";
    	
    	// array_splice(数组,开始下标,替换次数,替换为) 替换指定数组中的指定元素
    	$info = array("Linux","PHP","Apache","MySQL","Nginx","Zabbix");
    	array_splice($info,1,1,"AAAA");
    	echo "将下标1的位置替换为AAAA "; print_r($info); echo "<br>";
    
    	array_splice($info,2);
    	echo "从第2个元素向后的都删除掉 "; print_r($info); echo "<br>";
    	
    	// array_combine() 将两个数组合并为新数组 (两个数组必须相等)
    	// 其中第一个数组为KEY 第二个数组为Value
    	$key = array("1","2","3");
    	$value = array("Apache","Nginx","Cpp");
    	$new_array = array_combine($key,$value);
    	echo "合并后: "; print_r($new_array); echo "<br>";
    	
    	// array_merge() 将两个数组合并为新数组 (合并时自动去重)
    	$varA = array("a" => "Linux","b" => "MySQL");
    	$varB = array("c" => "Python","a" => "PHP");
    	echo "合并后: "; print_r(array_merge($varA,$varB)); echo "<br>";
    	
    	// array_ntersect()/array_diff() 计算两个数组的交集/差集
    	$varA = array(1,2,3,4,5);
    	$varB = array(3,4,5,6,7);
    	echo "交集: "; print_r(array_intersect($varA,$varB));echo "<br>";
    	echo "差集: "; print_r(array_diff($varA,$varB));echo "<br>";
    ?>
    

    数组模拟实现栈/队列: 数组同样可以实现栈与队列的基本操作,如下所示.

    <?php
    	// 实现数组栈
    	$stack = [];
    	array_push($stack,1);
    	array_push($stack,2);
    	array_pop($stack);
    	echo "简易版: "; print_r($stack);echo "<br>";
    	
    	// key-value类型的栈
    	$kv_stack = array(1 =>"Linux");
    	array_push($kv_stack,2,"Apache");
    	echo "key-value版栈: "; print_r($kv_stack);echo "<br>";
    	
    	// 实现队列
    	$kv_loop = array(1 =>"Linux");
    	array_unshift($kv_loop, 2, "Apache");
    	array_shift($kv_loop);
    	echo "key-value 版队列: "; print_r($kv_loop);echo "<br>";
    ?>
    

    数组的打乱/互转: 实现对数组的打乱,或将数组与字符串实现互相转换.

    <?php
    	// $var = array(1,2,3,4,5,6,7,8,9,10);
    	$var = range(0,10);
    	
    	echo "当前数组: "; print_r($var); echo "<br>";
    	echo "随机取出一个元素: " . array_rand($var,1) . "<br>";
    	echo "随机打乱数组: " . shuffle($var) . "<br>";
    	echo "数组求和: " . array_sum($var) . "<br>";
    	
    	array_unshift($var, "perl");   # 在数组头部添加元素
    	print_r($var);echo "<br>";
    
    	array_push($var, "golang");    # 在数组尾部添加元素
    	print_r($var);echo "<br>";
    
    	array_shift($var);             # 删除数组第一个元素
    	print_r($var);echo "<br>";
    
    	array_pop($var);               # 删除数组最后一个元素
    	print_r($var);echo "<br>";
    
    	// 将数组转为字符串/数组到字符串,互转.
    	$var = array("python","php","C","java");
    	$var = implode(",", $var);  # 数组转换为字符串
    	echo "字符串: "; print_r($var); echo "<br>";
    
    	$var = explode(",", $var);  # 字符串转数组
    	echo "数组: "; print_r($var); echo "<br>";
    ?>
    

    版权声明: 本博客,文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章【均为原创】作品,转载请务必【添加出处】,您添加出处是我创作的动力!

    警告:如果您恶意转载本人文章,则您的整站文章,将会变为我的原创作品,请相互尊重!
  • 相关阅读:
    【WCF】服务并发中的“可重入模式”
    【.net 深呼吸】项目中是否有必要删去多余的引用
    【.net 深呼吸】细说CodeDom(10):生成异常处理语句
    【.net 深呼吸】细说CodeDom(9):动态编译
    【.net 深呼吸】细说CodeDom(8):分支与循环
    shell脚本将gbk文件转化为utf-8
    PHP判断文件大小是MB、GB、TB...
    svn: E205007: None of the environment variables SVN_EDITOR
    phpstorm yii2框架的redis和mongodb提示
    linux下phpmailer发送邮件出现SMTP ERROR: Failed to connect to server: (0)错误
  • 原文地址:https://www.cnblogs.com/LyShark/p/13377963.html
Copyright © 2020-2023  润新知