欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

教程  php基础(六)--数组、常见的数组函数汇总详解

PHP学习 本站 1039 0评论

今天整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数共8个知识点,非常适合正在学习PHP的初学者。


一、数组基础


1.什么是数组

数组就是一组数据的集合,把一系列数据组织起来,形成一个可操作的整体。

数组array是一组有序的变量,其中每个变量被称为一个元素

每个元素由一个特殊的标识符来区分,这个标识符称为键(也称下标)

数组的每个实体都包含两项:键(key)和值(value)

可以通过键来获取相应的数组元素。这些键可以是数值键或关联键。

111.jpg


2.声明创建数组

在PHP中声明数组的方式主要有两种:

一是应用array()函数声明数组,一是直接为数组元素赋值。


1)array()函数声明的数组的方式:

$array(数组名) = array([mixed...]) 

参数mixed的语法为key=>value

多个mixed之间用逗号分开,分别定义索引和值。索引可以是字符串或数字。如果省略了索引,则会自动产生从0开始的整数索引。如果索引是整数,则下一个产生索引将是目前最大索引+1.如果定义了两个完全一样的索引,则后面一个会覆盖前一个。


应用array()函数声明数组,数组下标既可以是数字索引也可以是关联索引。下标与数组元素之间用“=>”进行连接。不同元素之间用逗号分开。数组下标是从0开始的。

$array=array("1"=>"编","2"=>"程","3"=>"词","4"=>"典");
print_r($array);

输出:Array ( [1] => 编 [2] => 程 [3] => 词 [4] => 典 )


应用array()定义数组比较灵活,可以在函数体中给出数组元素值,而不必给出键值,如:

$array=array("asp","php","jsp");
print_r($array);

输出:Array ( [0] => asp [1] => php [2] => jsp )   //默认是从0开始的整数索引


可以通过给变量赋予一个没有参数的array()函数创建空数组,然后使用放开后[ ]语法来添加数组元素值,如:

$array=array();  $array[0]="jsp";   $array[1]="PHP"; print_r($array);

输出:Array ( [0] => jsp [1] => PHP )


2)直接为数组元素赋值 创建数组

如果在创建数组时不知所创建数组的大小,或在实际编写程序时数组的大小可能发生变化,采用这种数组创建的方法较好。如:

$array[1]="I";  $array[2]="love";   $array[3]="PHP";
print_r($array); //输出所创建数组的结构

输出:Array ( [0] => jsp [1] => I [2] => love [3] => PHP )


索引也可以为空:如$array[]="I";  $array[]="love";   $array[]="PHP";

注意:通过直接为数组元素赋值的方式声明数组时,要求同一数组元素中的数组名相同

数组的名称不能和已存在的变量名相同

数组名称是区分大小写的

数组的值用单引号和双引号都可以


3.数组的类型

PHP支持两种数组:数字索引数组(index array)和关联数组(associative array),前者使用数字为键,后者使用字符串为键。


数字索引数组:

数字索引一般表示数组元素在数组中的位置,由数字组成,下标从0开始。索引默认从0开始,不需要特别指定。当然也可以从某个指定的位置开始保存数据。


关联数组:

关联数组的键名可以是数字和字符串的混合形式,在一个数组中,只要键名有一个不是数字,那么这个数组就称为关联数组。

关联数组使用字符串索引(或键)来访问在数组中的元素值

$newarray = array("first"=>1,"second"=>2,"third"=>3);
echo $newarray["second"];
$newarray["third"]=8;
echo $newarray["third"];

输出:2 8


如果键名是一个字符串,不要忘了给键名加上界定修饰符——单引号(’)或双引号(””)

对于数字索引数组,最好也加上界定符。

字符串索引的数组访问时,键名一定要用引号,如:echo $newarray["third"];


键名的新建和修改:

$arr=array('a'=>'abc','b'=>'123','c'=>'');
$arr[]='baidu'; //新增元素
$arr['a']='cde'; //修改元素索引为a的值
print_r($arr);

输出:28Array ( [a] => cde [b] => 123 [c] => [0] => baidu )


4.输出数组

在PHP中对数组元素输出,可以通过echo和print语句来实现,但这只能对数组中某一元素进行输出要将数组结构输出则要使用print_r()函数,其语法:

print_r(mixed expression)

参数expression为普通的整形、字符型或实型变量则输出该变量本身,如果该参数为数组,则按一定键值和元素的顺序显示出该数组中的所有元素。

$array=array(1=>"PHP5",2=>"从入门",3=>"到精通");
print_r($array);

输出:Array ( [1] => PHP5 [2] => 从入门 [3] => 到精通 )


var_dump()函数也可以输出数组或对象,元素数量以及每个字符串的长度,还能够输出数组和字符串的结构

$array=array(1=>"PHP5",2=>"从入门",3=>"到精通");
var_dump($array);

输出:array(3) { [1]=> string(4) "PHP5" [2]=> string(6) "从入门" [3]=> string(6) "到精通" }


5.数组的构造


一维数组

当一个数组的元素是变量时,称这个数组为一维数组。一维数组是普通的数组,只保存一系列内容。声明如下:

222.jpg

$array=array("PHP开发实战宝典","PHP从入门到精通","PHP求职宝典");
$arrays=array('first'=>" PHP开发实战宝典",'second'=>"PHP从入门到精通",'third'=>" PHP求职宝典");


二维数组

一个数组的元素如果是一维数组,那么这个数组就是二维数组。如:

$str = array (
"PHP类图书"=>array ("PHP求职宝典","PHP经典编程","PHP开发实战宝典"),
 "JAVA类图书"=>array ("a"=>"JAVA范例手册","b"=>"JAVA WEB范例宝典"),
 "ASP类图书"=>array ("ASP学习手册",2=>"ASP范例宝典","ASP开发实战宝典")
);//声明数组
print_r ( $str) ;

输出:Array ( 

[PHP类图书] => Array ( [0] => PHP求职宝典 [1] => PHP经典编程 [2] => PHP开发实战宝典 )

         [JAVA类图书] => Array ( [a] => JAVA范例手册 [b] => JAVA WEB范例宝典 )

         [ASP类图书] => Array ( [0] => ASP学习手册 [2] => ASP范例宝典 [3] => ASP开发实战宝典 ) 

)


二、数组操作的基本函数


1.数组的键名和值


count(array, mode); 对数组中的元素个数进行统计

$arr=array('a'=>'abc','b'=>'123','c'=>'');  //输出3

如果是二维数组,直接使用count()函数只会显示到一维数组的个数,所以要使用递归的方式来统计。

$array = array("php" => array("PHP函数参考大全","PHP程序开发范例宝典","PHP数据库系统开发完全手册"),
               "asp" => array("ASP经验技巧宝典")
            );//声明一个二维数组
echo count($array,COUNT_RECURSIVE);//递归统计数组元素的个数

输出:6


array_values($arr);获得数组的

$a=array("Name"=>"Bill","Age"=>"60","Country"=>"USA");
print_r(array_values($a));
//输出:Array ( [0] => Bill [1] => 60 [2] => USA )


array_keys($arr);获得数组的键名

$a=array("Name"=>"Bill","Age"=>"60","Country"=>"USA");
print_r(array_keys($a));
//输出:Array ( [0] => Name [1] => Age [2] => Country )


array_flip($arr);数组中的值与键名互换(如果有重复前面的会被后面的覆盖)

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$result=array_flip($a1);
print_r($result);
//输出:Array ( [red] => a [green] => b [blue] => c [yellow] => d )


in_array("Mark",$arr);在数组中检索Mark

$people = array("Bill", "Steve", "Mark", "David");
if (in_array("Mark", $people))
{
    echo "匹配已找到";
}
else
{
    echo "匹配未找到";
}
//输出:匹配已找到


array_search("string",$arr, strict);在数组中检索string.

· 如果在数组中找到指定的键值,则返回对应的键名,否则返回 FALSE。

· 如果在数组中找到键值超过一次,则返回第一次找到的键值所匹配的键名。

· strict可选。如果该参数被设置为 TRUE,则函数在数组中搜索数据类型和值都一致的元素。可能的值:

true;false - 默认

$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_search("red",$a);
//输出:a


array_key_exists(key,array);检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。

提示:请记住,如果您指定数组的时候省略了键名,将会生成从 0 开始并且每个键值对应以 1 递增的整数键名

$a=array("Volvo"=>"XC90","BMW"=>"X5");
if (array_key_exists("Volvo",$a))
{
    echo "键存在!";
}
else
{
    echo "键不存在!";
}
//输出:键存在!
$a=array("Volvo","BMW");
if (array_key_exists(0,$a))
{
    echo "键存在!";
}
else
{
    echo "键不存在!";
}
//输出:键存在!


isset($arr[string]):检索给定的键名是否存在数组中 和 array_key_exists的区别如下:


array_key_exists用于检查某个键名是否存在于数组中,而isset也可以用于检测数组中某个键名是否存在,那么二者有什么区别呢?本文章将为大家讲解array_key_exists() 与 isset() 使用中的一些区别


一个基本的区别是isset()可用于数组和变量,而array_key_exits()只能用于数组。

但是最主要的区别在于在设定的条件下的返回值,现在我们来验证一下这个最主要的区别。 

array_key_exists() 会检查键值的存在. 这个函数会返回TRUE,只要键值存在,即使值为NULL.

$arr = array( "one"=>"1", "two"=>"2", "three"=>null ); 
array_key_exists("one", $arr); // true 
array_key_exists("two", $arr); // true 
array_key_exists("three", $arr); // true

isset() 和arrry_key_exitst()不同,isset()会同时检查键和值,只有当健存在,对应的变量不为NUll的时候才会返回TURE。

$arr = array( "one"=>"1", "two"=>"2", "three"=>null );
isset($arr["one"]); // true 
isset($arr["two"]); // true 
isset($arr["three"]); // false

 

2.数组的内部指针


current($arr);返回数组中的当前单元

pos($arr);返回数组中的当前单元

key($arr);返回数组中当前单元的键名

prev($arr);将数组中的内部指针倒回一位

next($arr);将数组中的内部指针向前移动一位

end($arr);将数组中的内部指针指向最后一个单元

reset($arr;将数组中的内部指针指向第一个单元

each($arr);将返回数组当前元素的一个键名/值的构造数组,并使数组指针向前移动一位

list($key,$value)=each($arr);获得数组当前元素的键名和值


3.数组和变量之间的转换


extract($arr);用于把数组中的元素转换成变量导入到当前文件中,键名当作变量名,值作为变量值

array必需。规定要使用的数组。
extract_rules

可选。extract() 函数将检查每个键名是否为合法的变量名,同时也检查和符号表中已存在的变量名是否冲突。对不合法和冲突的键名的处理将根据此参数决定。

可能的值:

EXTR_OVERWRITE - 默认。如果有冲突,则覆盖已有的变量。

EXTR_SKIP - 如果有冲突,不覆盖已有的变量。

EXTR_PREFIX_SAME - 如果有冲突,在变量名前加上前缀 prefix。

EXTR_PREFIX_ALL - 给所有变量名加上前缀 prefix。

EXTR_PREFIX_INVALID - 仅在不合法或数字变量名前加上前缀 prefix。

EXTR_IF_EXISTS - 仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。

EXTR_PREFIX_IF_EXISTS - 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。

EXTR_REFS - 将变量作为引用提取。导入的变量仍然引用了数组参数的值。

prefix

可选。请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。

前缀和数组键名之间会自动加上一个下划线。

$a = "Original";
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
//输出:$a = Cat; $b = Dog; $c = Horse


compact(var1,var2,var3);用给定的变量名创建一个数组

compact() 函数创建包含变量名和它们的值的数组。

注释:任何没有变量名与之对应的字符串都被略过。

$firstname = "Bill";
$lastname = "Gates";
$age = "60";
$name = array("firstname", "lastname");
$result = compact($name, "location", "age");
print_r($result);

输出:

Array(

   [firstname] => Bill

   [lastname] => Gates

   [age] => 60

)


三、数组的分段和填充


1.数组的分段


array_slice() 函数在数组中根据条件取出一段值,并返回。

array_slice(array,start,length,preserve)

注释:如果数组有字符串键,所返回的数组将保留键名。

参数描述
array必需。规定数组。
start

必需。数值。规定取出元素的开始位置。 0 = 第一个元素。

如果该值设置为正数,则从前往后开始取。

如果该值设置为负数,则从后向前取 start 绝对值。 -2 意味着从数组的倒数第二个元素开始。

length

可选。数值。规定被返回数组的长度。

如果该值设置为整数,则返回该数量的元素。

如果该值设置为负数,则函数将在举例数组末端这么远的地方终止取出。

如果该值未设置,则返回从 start 参数设置的位置开始直到数组末端的所有元素。

preserve

可选。规定函数是保留键名还是重置键名。可能的值:

true - 保留键名

false - 默认。重置键名

$a=array("red","green","blue","yellow","brown");
print_r(array_slice($a,1,2));  //Array ( [0] => green [1] => blue )
$a=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow","e"=>"brown");
print_r(array_slice($a,1,2));  //Array ( [b] => green [c] => blue )
$a=array("0"=>"red","1"=>"green","2"=>"blue","3"=>"yellow","4"=>"brown");
print_r(array_slice($a,1,2));  //Array ( [0] => green [1] => blue )


array_splice() 函数从数组中移除选定的元素并用新元素取代它。该函数也将返回包含被移除元素的数组。与上个函数不同在于返回的序列从原数组中删除

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("a"=>"purple","b"=>"orange");
print_r(array_splice($a1,0,2,$a2));  //Array ( [a] => red [b] => green )
$a1=array("0"=>"red","1"=>"green");
$a2=array("0"=>"purple","1"=>"orange");
array_splice($a1,1,0,$a2);
print_r($a1);    //Array ( [0] => red [1] => purple [2] => orange [3] => green )


2.分割多个数组


array_chunk() 函数把数组分割为新的数组块。

array_chunk(array,size,preserve_key);

· array必需。规定要使用的数组。

· size必需。整数值,规定每个新数组包含多少个元素。

· preserve_key可选。可能的值:

· true - 保留原始数组中的键名。

· false - 默认。每个结果数组使用从零开始的新数组索引。

· 其中每个数组的单元数目由 size 参数决定。最后一个数组的单元数目可能会少几个。

· 可选参数 preserve_key 是一个布尔值,它指定新数组的元素是否有和原数组相同的键(用于关联数组),还是从 0 开始的新数字键(用于索引数组)。默认是分配新的键。

$cars=array("Volvo","BMW","Toyota","Honda","Mercedes","Opel");
print_r(array_chunk($cars,2));  
//Array ( [0] => Array ( [0] => Volvo [1] => BMW ) [1] => Array ( [0] => Toyota [1] => Honda ) [2] => Array ( [0] => Mercedes [1] => Opel ) )


3.数组的填充


array_pad() 函数将指定数量的带有指定值的元素插入到数组中。

array_pad(array,size,value)

· array必需。规定数组。

· size必需。规定从函数返回的数组中元素的个数。

· value必需。规定从函数返回的数组中新元素的值。

提示:如果您将 size 参数设置为负数,该函数会在原始数组之前插入新的元素(参见下面的实例)。

注释:如果 size 参数小于原始数组的长度,该函数不会删除任何元素。

$a=array("red","green");
print_r(array_pad($a,-5,"blue"));
//Array ( [0] => blue [1] => blue [2] => blue [3] => red [4] => green )


四、数组与栈


array_push($arr,value1,value2......);将一个或多个元素压入数组的末尾(入栈),返回新数组元素的个数。

该函数等于多次调用 $array[] = $value。

$a=array("red","green");
array_push($a,"blue","yellow");
print_r($a);  //Array ( [0] => red [1] => green [2] => blue [3] => yellow )

注释如果用 array_push() 来给数组增加一个单元,还不如用 $array[] =,因为这样没有调用函数的额外负担。

注释:如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。


array_pop($arr);将数组的最后一个元素弹出(出栈

$a=array("red","green","blue");
array_pop($a);
print_r($a); //Array ( [0] => red [1] => green )


五、数组与列队


array_shift($arr); 数组中的第一个元素移出并作为结果返回(数组长度减1,其他元素向前移动一位,数字键名改为从零技术,文字键名不变)

$a=array("a"=>"red","b"=>"green","c"=>"blue");
echo array_shift($a);
print_r ($a);  //redArray ( [b] => green [c] => blue )


array_unshift($arr,value1,value2......);在数组的开头插入一个或多个元素

array_unshift() 函数用于向数组插入新元素。新数组的值将被插入到数组的开头。被加上的元素作为一个整体添加,· 这些元素在数组中的顺序和在参数中的顺序一样。

· 该函数会返回数组中元素的个数。

注释:数值键名将从 0 开始,以 1 递增。字符串键名将保持不变。

$a=array("a"=>"red","b"=>"green");
array_unshift($a,"blue");
print_r($a);  //Array ( [0] => blue [a] => red [b] => green )


六、回调函数


array_walk(array,myfunction,userdata...) 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。

· array必需。规定数组。

· myfunction必需。用户自定义函数的名称。

· userdata,...可选。规定用户自定义函数的参数。您能够向此函数传递任意多参数。


注释:您可以通过把用户自定义函数中的第一个参数指定为引用:&$value,来改变数组元素的值

function myfunction(&$value,$key)
{
$value="yellow";
}
$a=array("a"=>"red","b"=>"green","c"=>"blue");
array_walk($a,"myfunction");
print_r($a); //Array ( [a] => yellow [b] => yellow [c] => yellow )

· array_walk() 函数对数组中的每个元素应用回调函数。如果成功则返回 TRUE,否则返回 FALSE。

· 典型情况下 myfunction 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。

· 如果 myfunction 函数需要的参数比给出的多,则每次 array_walk() 调用 myfunction 时都会产生一个 E_WARNING 级的错误。这些警告可以通过在 array_walk() 调用前加上 PHP 的错误操作符 @ 来抑制,或者用 error_reporting()。


array_map("function",$arr1,$arr2...)将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新值的数组;可以处理多个数组(当使用两个或更多数组时,他们的长度应该相同)

回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

function myfunction($v1,$v2)
{
if ($v1===$v2)
  {
  return "same";
  }
return "different";
}
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction",$a1,$a2));
//Array ( [0] => different [1] => same [2] => different )


array_filter(array,callbackfunction);函数用回调函数过滤数组中的值。

该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。

function test_odd($var)
{
return($var & 1);
}
$a1=array("a","b",2,3,4);
print_r(array_filter($a1,"test_odd"));
//Array ( [3] => 3 )


array_reduce(array,myfunction,initial) 函数向用户自定义函数发送数组中的值,并返回一个字符串。

注释:如果数组是空的且未传递 initial 参数,该函数返回 NULL。

如果指定第三个参数,则该参数将被当成是数组中的第一个值来处理,或者如果数组为空的话就作为最终返回值。

function myfunction($v1,$v2)
{
return $v1 . "-" . $v2;
}
$a=array("Dog","Cat","Horse");
print_r(array_reduce($a,"myfunction",5));
//5-Dog-Cat-Horse


七、数组的排序

详解请参考:https://ittxx.cn/view/73 


1.通过元素值对数组排序

sort($arr);由小到大的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序

rsort($arr);由大到小的顺序排序(第二个参数为按什么方式排序)忽略键名的数组排序

usort($arr,"function");使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)忽略键名的数组排序

asort($arr);由小到大的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序

arsort($arr);由大到小的顺序排序(第二个参数为按什么方式排序)保留键名的数组排序

uasort($arr,"function");使用用户自定义的比较函数对数组中的值进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)保留键名的数组排序


2.通过键名对数组排序

ksort($arr);按照键名正序排序

krsort($arr);按照键名逆序排序

uksort($arr,"function");使用用户自定义的比较函数对数组中的键名进行排序(function中有两个参数,0表示相等,正数表示第一个大于第二个,负数表示第一个小于第二个)


3.自然排序法排序

natsort($arr);自然排序(忽略键名)

natcasesort($arr);自然排序(忽略大小写,忽略键名)


八、数组的计算


1.数组元素的求和


array_sum($arr);对数组内部的所有元素做求和运算

如果所有值都是整数,则返回一个整数值。如果其中有一个或多个值是浮点数,则返回浮点数。

$a=array("a"=>52.2,"b"=>13.7,"c"=>0.9);
echo array_sum($a); //66.8


2.数组的合并


array_merge($arr1,$arr2...);合并两个或多个数组(相同的字符串键名,后面的覆盖前面的,相同的数字键名,后面的不会做覆盖操作,而是附加到后面)

“+”$arr1+$arr2;对于相同的键名只保留后一个

$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge($a1,$a2));
//Array ( [a] => red [b] => yellow [c] => blue )
$a=array(3=>"red",4=>"green");
print_r(array_merge($a)); //Array ( [0] => red [1] => green )


array_merge_recursive($arr1,$arr2); 函数把一个或多个数组合并为一个数组

· 该函数与 array_merge() 函数的区别在于处理两个或更多个数组元素有相同的键名时。

· array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。

注释:如果您仅仅向 array_merge_recursive() 函数输入一个数组,结果与 array_merge() 相同,函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。

$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge_recursive($a1,$a2));
//Array ( [a] => red [b] => Array ( [0] => green [1] => yellow ) [c] => blue )


3.数组的差集


array_diff($arr1,$arr2,$arr3);函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值。

· array1必需。与其他数组进行比较的第一个数组。

· array2必需。与第一个数组进行比较的数组。

· array3,...可选。与第一个数组进行比较的其他数组。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","h"=>"yellow");
$result=array_diff($a1,$a2,$a3);
print_r($result);
//Array ( [b] => green [c] => blue )

在返回的数组中,键名保持不变。


array_diff_assoc($arr1,$arr2,$arr3);返回差集结果数组,键名也做比较

array_diff_assoc() 函数用于比较两个(或更多个)数组的键名和键值 ,并返回差集。

· 该函数比较两个(或更多个)数组的键名和键值,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名和键值。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("a"=>"red","b"=>"green","c"=>"blue");
$result=array_diff_assoc($a1,$a2);
print_r($result);  //Array ( [d] => yellow )
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");
$result=array_diff_assoc($a1,$a2);
print_r($result);
//Array ( [a] => red [b] => green [c] => blue [d] => yellow )


4.数组的交集


array_intersect(array1,array2,array3...);返回交集结果数组

array_intersect() 函数用于比较两个(或更多个)数组的键值,并返回交集。结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变。

· 该函数比较两个(或更多个)数组的键值,并返回交集数组,该数组包括了所有在被比较的数组(array1)中,同时也在任何其他参数数组(array2 或 array3 等等)中的键值。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","h"=>"yellow");
$result=array_intersect($a1,$a2,$a3);
print_r($result);  //Array ( [a] => red )


array_intersect_assoc() 函数返回两个或多个数组的交集数组,键名也做比较

与 array_intersect() 函数 不同的是,本函数除了比较键值,还比较键名。返回的数组中元素的键名保持不变。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("a"=>"red","b"=>"green","g"=>"blue");
$a3=array("a"=>"red","b"=>"green","g"=>"blue");
$result=array_intersect_assoc($a1,$a2,$a3);
print_r($result);
//Array ( [a] => red [b] => green )


九、其他的数组函数


range(low,high,step)函数创建一个包含指定范围的元素的数组。

· 该函数返回一个包含从 low 到 high 之间的元素的数组。如果 high 比 low 小,则返回反序的数组。

· low必需。规定数组的最低值。

· high必需。规定数组的最高值。

· step可选。规定元素之间的步进制。默认是 1。

$number = range(0,50,10);
print_r ($number);
//Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 )


array_unique(array)函数移除数组中的重复的值,并返回结果数组。

当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。

· 返回的数组中键名不变。

注释:被保留的数组将保持第一个数组项的键名类型。

· array必需。规定数组。

· sortingtype   可选。规定如何比较数组元素/项目。

可能的值:

SORT_STRING - 默认。把项目作为字符串来比较。

SORT_REGULAR - 把每一项按常规顺序排列(Standard ASCII,不改变类型)。

SORT_NUMERIC - 把每一项作为数字来处理。

SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。

$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));
Array ( [a] => red [b] => green )


array_reverse($arr,TRUE);  返回一个单元顺序与原数组相反的数组,如果第二个参数为TRUE保留原来的键名

$a=array("Volvo","XC90",array("BMW","Toyota"));
$reverse=array_reverse($a);
$preserve=array_reverse($a,true);
print_r($a);
print_r($reverse);
print_r($preserve);
Array ( [0] => Volvo [1] => XC90 [2] => Array ( [0] => BMW [1] => Toyota ) ) 
Array ( [0] => Array ( [0] => BMW [1] => Toyota ) [1] => XC90 [2] => Volvo ) 
Array ( [2] => Array ( [0] => BMW [1] => Toyota ) [1] => XC90 [0] => Volvo )


array_rand(array,number)函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组。

说明

· array_rand() 函数从数组中随机选出一个或多个元素,并返回。

· 第二个参数用来确定要选出几个元素。如果选出的元素不止一个,则返回包含随机键名的数组,否则返回该元素的键名。

$a=array("red","green","blue","yellow","brown");
$random_keys=array_rand($a,3);
echo $a[$random_keys[0]]."<br>";
echo $a[$random_keys[1]]."<br>";
echo $a[$random_keys[2]];
blue
yellow
brown


shuffle($arr);函数把数组中的元素按随机顺序重新排列。该函数为数组中的元素分配新的键名。已有键名将被删除

$my_array = array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow","e"=>"purple");
shuffle($my_array);
print_r($my_array);
//Array ( [0] => purple [1] => red [2] => green [3] => yellow [4] => blue )


foreach() 遍历输出数组

第一种:遍历给定的 数组语句 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

foreach (array_expression as $value)   

eg:

$a = array('Tom','Mary','Peter','Jack'); 
foreach ($a as $value) {  echo $value."<br/>";}

最后得到的结果是:

Tom

Mary

Peter

Jack


第二种:同上,同时当前单元的键名也会在每次循环中被赋给变量 $key。

foreach (array_expression as $key => $value) 

foreach ($a as $key => $value) {  echo $key.','.$value."<br/>";}

最后得到的结果是:

0,Tom

1,Mary

2,Peter

3,Jack


更多数组函数请参考:http://www.w3school.com.cn/php/php_ref_array.asp 

更多PHP数组函数请参考官网:http://php.net/manual/zh/ref.array.php 


转载请注明: ITTXX.CN--分享互联网 » php基础(六)--数组、常见的数组函数汇总详解

最后更新:2019-02-28 11:36:27

赞 (3) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽