内部预定的函数比自己写的快,内部的不一定是用php写的,可能底层是c语言写的。要求数组、字符串的函数必须都会~!

数组的键/值操作函数

array_values -- 返回数组中所有的值 

格式:array array_values ( array input ) 
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$values = array_values($a);
var_dump($values); 
//array(3){[0]=>string(4)"张三"  [1]=>int(20)  [2]=>string(2)"男"}
<?php
	$str=array("one"=>"MissZhou","two"=>"就要","third"=>"累死了");
	
	print_r($str);
	echo '<br>';
	
	array_values($str);

	print_r($str);
	echo '<br>';

前后结果一样==

可以这么写:
<?php
	$str=array("one"=>"MissZhou","two"=>"就要","third"=>"累死了");
	
	print_r($str);
	echo '<br>';
	
	list($one,$two,$three)= array_values($str);

	print_r($one);
	echo '<br>';

	print_r($two);
	echo '<br>';

	print_r($three);
	echo '<br>';



array_keys -- 返回数组中所有的键名 

格式:array array_keys(array input[,mixed search_value [,bool strict]])   
其中search_value为则只返回该值的键名
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
$keys = array_keys($a);
for($i=0;$i<count($keys);$i++){
	echo $keys[$i]." ";  //name age sex 
} 


<?php
	$str=array("MissZhou"=>"one","就要"=>"two","累死了"=>"third");
	
	print_r($str);
	echo '<br>';
	
	list($one,$two,$three)= array_keys($str);

	print_r($one);
	echo '<br>';

	print_r($two);
	echo '<br>';

	print_r($three);
	echo '<br>';

	print_r(array_keys($str,"third"));

关于第三个参数:是否严格等于那个值
<?php
	$str=array("MissZhou"=>"one","就要"=>"two","累死了"=>"third","倒计时"=>"10","倒计时1"=>10);
	/*
	print_r($str);
	echo '<br>';
	
	list($one,$two,$three)= array_keys($str);

	print_r($one);
	echo '<br>';

	print_r($two);
	echo '<br>';

	print_r($three);
	echo '<br>';
*/
	print_r(array_keys($str,10,true));

输出: Array ( [0] => 倒计时1 )

in_array -- 检查数组中是否存在某个值 

格式:bool in_array(mixed needle,array haystack [, bool strict] )      
其中strict参数:是否匹配类型
$a = array("name"=>"张三","age"=>20,"sex"=>"男");
 if(in_array("张三",$a)){
           echo " ‘张三’在\$a数组中";   //”张三“在$a数组中
 }

array_flip -- 交换数组中的键和值 

格式:array array_flip ( array trans )
$a = array("name"=>"张三","age"=>20,"sex"=>"男");  
 $b = array_flip($a);
 foreach($b as $k=>$v){  
    echo "$k=>$v   ";  // 张三=>name 20=>age 男=>sex 
 }

array_reverse --  返回一个单元顺序相反的数组 

语法:array array_reverse ( array array [, bool preserve_keys] )  
如果 preserve_keys 为 TRUE 则保留原来的键名 
$a = array("name"=>"张三","age"=>20,"sex"=>"男");  
 $b = array_reverse($a);
 foreach($b as $k=>$v){  
    echo “$k=>$v   ”;  // sex=>男 age=>20 name=>张三 
 }

in_array -- 检查数组中是否存在某个值 

格式:bool in_array(mixed needle,array haystack [, bool strict] )      
其中strict参数:是否匹配类型

$a = array("name"=>"张三","age"=>20,"sex"=>"男");
 if(in_array("张三",$a)){
           echo " ‘张三’在\$a数组中";   //”张三“在$a数组中
 }
在php4.2.0以后 needle可以是数组
<?php
	$str=array("os"=>"linux","lan"=>"php",array("a","b"));
	if(in_array(array("b","a"),$str))
		echo "ba";
	else echo"no";


array_search--返回此键值名

同上函数,返回第一个匹配的键值名

array_key_exists键是否存在

<?php
	$str=array("os"=>"linux","lan"=>"php",array("a","b"));
	echo array_key_exists("os",$str);
还记不记得long long ago之前讲过一个isset()函数,判断是否存在这个值~(定义变量、销毁变量那会讲的)
但是有一个问题:
<?php
	$str=array("os"=>"linux","lan"=>"php",array("a","b"),"say"=>null);
	echo array_key_exists('say',$str);
	if(isset($str["say"]))echo "yes";
	else echo"no";



array_flip -- 交换数组中的键和值 

格式:array array_flip ( array trans )
$a = array("name"=>"张三","age"=>20,"sex"=>"男");  
 $b = array_flip($a);
 foreach($b as $k=>$v){  
    echo "$k=>$v   ";  // 张三=>name 20=>age 男=>sex 
 }
<?php
	$str=array("one"=>"MissZhou","two"=>"要","three"=>"好好学习","four"=>"MissZhou");
	$str1=array_flip($str);//需要注意要是值重复了怎么办后面的把前面的覆盖~
	print_r($str);//不改变原来的数组
	print_r($str1);

而且只能是整数和字符串!不转化!只有警告,没有隐式类型转变

array_reverse --  返回一个单元顺序相反的数组 

语法:array array_reverse ( array array [, bool preserve_keys] )  
如果 preserve_keys 为 TRUE 则保留原来的键名 
$a = array("name"=>"张三","age"=>20,"sex"=>"男");  
 $b = array_reverse($a);
 foreach($b as $k=>$v){  
    echo “$k=>$v   ”;  // sex=>男 age=>20 name=>张三 
 }
<?php
	$str=array("one"=>"MissZhou","two"=>"要","three"=>"好好学习","four"=>"MissZhou");
	$str1=array_reverse($str);//需要注意要是值重复了怎么办后面的把前面的覆盖~
	print_r($str);//不改变原来的数组
	print_r($str1);
	

只是前后次序变了,用于反过来的遍历
第二个参数的具体作用:对于刚刚的示例没有变化~区别哩?
处理索引数组有作用:
<?php
	$str=array("MissZhou","要","好好学习");
	$str1=array_reverse($str,false);//需要注意要是值重复了怎么办后面的把前面的覆盖~
	print_r($str);//不改变原来的数组
	print_r($str1);
	

输出: Array ( [0] => MissZhou [1] => 要 [2] => 好好学习 ) Array ( [0] => 好好学习 [1] => 要 [2] => MissZhou )

统计数组元素的个数与唯一性

count -- 计算数组中的单元数目或对象中的属性个数

语法:int count ( mixed var [, int mode] )
如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。
<?php
	$str="hello";
	echo count($str).'<br>';//面试考点
	$str="";
	echo count($str).'<br>';
	
	$arr=array("MissZhou","要","努力");
	echo count($arr).'<br>';

	$arr1=array(array(1,2,3),array(4,5));
	echo count($arr1).'<br>';

	echo count($arr1,1).'<br>';//5+2


array_count_values -- 统计数组中所有的值出现的次数 

语法:array array_count_values ( array input )

array_unique -- 移除数组中重复的值 

语法:array array_unique ( array array ) 
<?php
	$str=array("MissZhou","MissZhou","要努力");
	print_r(array_count_values($str));
	echo '<br>';
	print_r(array_unique($str));//只留第一个出现的


使用回调函数处理数组的函数

array_filter --  用回调函数过滤数组中的单元

语法:rray array_filter ( array input [, callback callback] ) 
依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
如果没有提供 callback 函数,array_filter() 将删除 input 中所有等值为 FALSE 的条目。  
<?php
	$arr=array(1,2,3,-3,3,false,"",null,0);
	var_dump($arr);
	echo '<br>';

	var_dump(array_filter($arr));

array (size=9)
  0 =>  1
  1 =>  2
  2 =>  3
  3 =>  -3
  4 =>  3
  5 =>  false
  6 =>  '' (length=0)
  7 => null
  8 =>  0

array (size=5)
  0 =>  1
  1 =>  2
  2 =>  3
  3 =>  -3
  4 =>  3
回调函数:
<?php
	$arr=array(1,2,3,-3,3,false,"",null,0);
	var_dump($arr);
	echo '<br>';
	function myfun($value){
		if($value>0) return true;
		else return false;
	}
	var_dump(array_filter($arr,"myfun"));
array (size=9)
  0 =>  1
  1 =>  2
  2 =>  3
  3 =>  -3
  4 =>  3
  5 =>  false
  6 =>  '' (length=0)
  7 => null
  8 =>  0

array (size=4)
  0 =>  1
  1 =>  2
  2 =>  3
  4 =>  3
用匿名函数:
<?php
	$arr=array(1,2,3,-3,4,false,"",null,0);
	var_dump($arr);
	echo '<br>';

	var_dump(array_filter($arr,function($value){
		return !($value&1);
	}));

array (size=9)
  0 =>  1
  1 =>  2
  2 =>  3
  3 =>  -3
  4 =>  4
  5 =>  false
  6 =>  '' (length=0)
  7 => null
  8 =>  0

array (size=6)
  1 =>  2
  4 =>  4
  5 =>  false
  6 =>  '' (length=0)
  7 => null
  8 =>  0
默认保留原有的键名,重新索引:
<?php
	$arr=array(1,2,3,-3,4,false,"",null,0);
	var_dump($arr);
	echo '<br>';

	var_dump(array_values(array_filter($arr,function($value){
		return !($value&1);
	})));

array (size=9)
  0 =>  1
  1 =>  2
  2 =>  3
  3 =>  -3
  4 =>  4
  5 =>  false
  6 =>  '' (length=0)
  7 => null
  8 =>  0

array (size=6)
  0 =>  2
  1 =>  4
  2 =>  false
  3 =>  '' (length=0)
  4 => null
  5 =>  0

array_walk--对数组中的每个成员应用用户函数

语法:bool array_walk ( array &array, callback funcname [, mixed userdata] )//引用型参数,不用再传到一个函数中
如果成功则返回 TRUE,失败则返回 FALSE。 
将用户自定义函数 funcname 应用到 array 数组中的每个单元。典型情况下 funcname 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname。 
array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。
值、键都有应用到函数:
<?php
	$str=array(1,2,3,4);

	function myfun($value){
		$value=$value*$value;
	}
	print_r($str);
	echo '<br>';
	array_walk($str,"myfun");
	print_r($str);
	echo '<br>';

猜猜结果是什么:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) 
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) 
为什么呢?因为函数上没加引用
<?php
	$str=array(1,2,3,4);

	function myfun(&$value){
		$value=$value*$value;
	}
	print_r($str);
	echo '<br>';
	array_walk($str,"myfun");
	print_r($str);
	echo '<br>';

输出: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) 
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 ) 

<?php
	$arr = array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);

	function myfun($value, $key) {
		echo "{$key} ============ > {$value} <br>"; 
	}



	print_r($arr);
	echo '<br>';

	array_walk($arr, "myfun");

	array_walk($arr, function(&$value, $key){
		
		$value="{$key} ----------> {$value}<br>";
	});

	print_r($arr);
	echo '<br>';

可以有第三个参数用于处理:
<?php
	$arr = array("one"=>1,"two"=>2,"three"=>3,"four"=>4,"five"=>5);




	print_r($arr);
	echo '<br>';

	array_walk($arr, function($value, $key, $str){
		echo "{$key} {$str} {$value}<br>";
	}, "###############");


	print_r($arr);
	echo '<br>';


输出:Array ( [one] => 1 [two] => 2 [three] => 3 ) 
one##############
two##############
three##############
Array ( [one] => 1 [two] => 2 [three] => 3 ) 

array_map --  将回调函数作用到给定数组的单元上 

语法: array array_map ( callback callback, array arr1 [, array ...] )
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。 
<?php
	$arr=array(1,2,3,4,5);
	$brr=array(2,4,6,8,10);
	print_r($arr);
	echo '<br>';
	function myfun($v,$bv){
		echo "$v-----$bv <br>";
		return $v*$bv;
	}
	$rarr=array_map("myfun",$arr,$brr);
	print_r($rarr);
	

输出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) 
1-----2 
2-----4 
3-----6 
4-----8 
5-----10 
Array ( [0] => 2 [1] => 8 [2] => 18 [3] => 32 [4] => 50 )
个数不同短的补空。但是前面的回调函数要是空呢?
<?php
	$arr=array(1,2,3,4,5);
	$brr=array(2,4,6,8,10);
	print_r($arr);
	echo '<br>';
	function myfun($v,$bv){
		echo "$v-----$bv <br>";
		return $v*$bv;
	}
	$rarr=array_map(null,$arr,$brr);
	print_r($rarr);
	

猜到是合在一起,怎么合?两维边三维了 好神奇~~
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) 
Array ( [0] => Array ( [0] => 1 [1] => 2 ) [1] => Array ( [0] => 2 [1] => 4 ) [2] => Array ( [0] => 3 [1] => 6 ) [3] => Array ( [0] => 4 [1] => 8 ) [4] => Array ( [0] => 5 [1] => 10 ) )


数组的排序函数
拆分、合并、分解与结合数组
数组与数据结构
其他有用的数组处理函数