1. 合并数组
array_merge()函数将数组合并到一起, 返回一个联合的数组所得到的数组以第一个输入数组参数开始, 按后面数组参数出现的顺序依次迫加其形式为:
代码如下:
array array_merge (array array1 array2,arrayN)
这个函数将一个或多个数组的单元合并起来, 一个数组中的值附加在前一个数组的后面返回作为结果的数组
如果输入的数组中有相同的字符串键名, 则该键名后面的值将覆盖前一个值然而, 如果数组包含数字键名, 后面的值将不会覆盖原来的值, 而是附加到后面
如果只给了一个数组并且该数组是数字索引的, 则键名会以连续方式重新索引
代码如下:
- $fruits = array("apple","banana","pear");
- $numbered = array("1","2","3");
- $cards = array_merge($fruits, $numbered);
- print_r($cards);
- // output
- // Array ( [0] => apple [1] => banana [2] => pear [3] => 1 [4] => 2 [5] => 3 )
- ?>
2. 追加数组
array_merge_recursive()函数与 array_merge()相同, 可以将两个或多个数组合并在一起, 形成一个联合的数组.两者之间的区别在于, 当某个输入数组中的某个键己经存在于结果数组中时该函数会采取不同的处理方式.array_merge()会覆盖前面存在的键 / 值对, 替换为当前输入数组中的键 / 值对, 而 array_merge_recursive()将把两个值合并在一起, 形成一个新的数组, 并以原有的键作为数组名还有一个数组合并的形式, 就是递归追加数组其形式为:
代码如下:
array array_merge_recursive(array array1,array array2[,array arrayN])
程序实例如下:
代码如下:
- $fruit1 = array("apple" => "red", "banana" => "yellow");
- $fruit2 = array("pear" => "yellow", "apple" => "green");
- $result = array_merge_recursive($fruit1, $fruit2);
- print_r($result);
- // output
- // Array ( [apple] => Array ( [0] => red [1] => green ) [banana] => yellow [pear] => yellow )
- ?>
现在键 apple 指向一个数组, 这个数组由两个颜色值组成的索引数组
3. 连接数组
array_combine()函数会得到一个新数组, 它由一组提交的键和对应的值组成其形式为:
代码如下:
array array_combine(array keys,array values)
注意, 两个输入数组必须大小相同, 不能为空示例如下
代码如下:
- $name = array("apple", "banana", "orange");
- $color = array("red", "yellow", "orange");
- $fruit = array_combine($name, $color);
- print_r($fruit);
- // output
- // Array ( [apple] => red [banana] => yellow [orange] => orange )
- ?>
4. 拆分数组 array_slice()
array_slice()函数将返回数组中的一部分, 从键 offset 开始, 到 offset+length 位置结束其形式:
代码如下:
array array_slice (array array, int offset[,int length])
offset 为正值时, 拆分将从距数组开头的 offset 位置开始; 如果 offset 为负值, 则拆分从距数组末尾的 offset 位置开始如果省略了可选参数 length, 则拆分将从 offset 开始, 一直到数组的最后一个元素如果给出了 length 且为正数, 则会在距数组开头的 offset+length 位置结束相反, 如果给出了 length 且为负数, 则在距数组开头的 count(input_array)-|length | 位置结束考虑一个例子:
代码如下:
- $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
- $subset = array_slice($fruits, 3);
- print_r($subset);
- // output
- // Array ( [0] => Pear [1] => Grape [2] => Lemon [3] => Watermelon )
- ?>
然后我们使用下负长度:
代码如下:
- $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
- $subset = array_slice($fruits, 2, -2);
- print_r($subset);
- // output
- // Array ( [0] => Orange [1] => Pear [2] => Grape )
- ?>
5. 接合数组 array_splice()
array_splice()函数会删除数组中从 offset 开始到 offset+length 结束的所有元素, 并以数组的形式返回所删除的元素其形式为:
代码如下:
array array_splice ( array array , int offset[,length[,array replacement]])
offset 为正值时, 则接合将从距数组开头的 offset 位置开始, offset 为负值时, 接合将从距数组末尾的 offset 位置开始如果忽略可选的 length 参数, 则从 offset 位置开始到数组结束之间的所有元素都将被删除如果给出了 length 且为正值, 则接合将在距数组开头的 offset + leng th 位置结束相反, 如果给出了 length 且为负值, 则结合将在距数组开头的 count(input_array)-length 的位置结束实例如下:
代码如下:
- $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
- $subset = array_splice($fruits, 4);
- print_r($fruits);
- print_r($subset);
- // output
- // Array ( [0] => Apple [1] => Banana [2] => Orange [3] => Pear )
- // Array ( [0] => Grape [1] => Lemon [2] => Watermelon )
- ?>
可以使用可选参数 replacement 来指定取代目标部分的数组实例如下:
代码如下:
- $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon");
- $subset = array_splice($fruits, 2, -1, array("Green Apple", "Red Apple"));
- print_r($fruits);
- print_r($subset);
- // output
- // Array ( [0] => Apple [1] => Banana [2] => Green Apple [3] => Red Apple [4] => Watermelon )
- // Array ( [0] => Orange [1] => Pear [2] => Grape [3] => Lemon )
- ?>
从程序可以很清楚看到这个函数的使用方法了
6. 数组的交集 array_intersect()
array_intersect()函数返回一个保留了键的数组, 这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成其形式如下:
代码如下:
array array_intersect(array array1,array array2[,arrayN])
下面这个例子将返回在 $fruit1 数组中出现的且在 $fruit2 和 $fruit3 中也出现的所有的水果:
代码如下:
- $fruit1 = array("Apple","Banana","Orange");
- $fruit2 = array("Pear","Apple","Grape");
- $fruit3 = array("Watermelon","Orange","Apple");
- $intersection = array_intersect($fruit1, $fruit2, $fruit3);
- print_r($intersection);
- // output
- // Array ( [0] => Apple )
- ?>
只有在两个元素相等且具有相同的数据类型时, array_intersect()函数才会认为它们是相同的
7. 关联数组的交集 array_intersect_assoc()
函数 array_intersect_assoc()与 array_intersect()基本相同, 只不过他在比较中还考虑了数组的键因此, 只有在第一个数组中出现, 且在所有其他输入数组中也出现的键 / 值对才返回到结果数组中
形式如下:
代码如下:
array array_intersect_assoc(array array1,array array2[,arrayN])
下面的例子返回了出现在 $fruit1 数组中, 也同时出现在 $fruit2 与 $fruit3 中的所有键 / 值对:
代码如下:
- $fruit1 = array("red"=>"Apple","yellow"=>"Banana","orange"=>"Orange");
- $fruit2 = array("yellow"=>"Pear","red"=>"Apple","purple"=>"Grape");
- $fruit3 = array("green"=>"Watermelon","orange"=>"Orange","red"=>"Apple");
- $intersection = array_intersect_assoc($fruit1, $fruit2, $fruit3);
- print_r($intersection);
- // output
- // Array ( [red] => Apple )
- ?>
8. 数组的差集 array_diff()
函数 array_diff()返回出现在第一个数组中但其他输入数组中没有的值这个功能与 array_intersect()相反
代码如下:
array array_diff(array array1,array array2[,arrayN])
实例如下:
代码如下:
- $fruit1 = array("Apple","Banana","Orange");
- $fruit2 = array("Pear","Apple","Grape");
- $fruit3 = array("Watermelon","Orange","Apple");
- $intersection = array_diff($fruit1, $fruit2, $fruit3);
- print_r($intersection);
- // output
- // Array ( [1] => Banana )
- ?>
9. 关联数组的差集 array_diff_assoc()
函数 array_diff_assoc()与 array_diff()基本相同, 只是它在比较时还考虑了数组的键因此, 只在第一个数组中出现而不再其他输入数组中出现的键 / 值对才会返回到结果数组中其形式如下:
代码如下:
array array_diff_assoc(array array1,array array2[,arrayN])
下面的例子只返回了[yellow] => Banana, 因为这个特殊的键 / 值对出现在 $fruit1 中, 而在 $fruit2 和 $fruit3 中都不存在
代码如下:
- $fruit1 = array("red"=>"Apple","yellow"=>"Banana","orange"=>"Orange");
- $fruit2 = array("yellow"=>"Pear","red"=>"Apple","purple"=>"Grape");
- $fruit3 = array("green"=>"Watermelon","orange"=>"Orange","red"=>"Apple");
- $intersection = array_diff_assoc($fruit1, $fruit2, $fruit3);
- print_r($intersection);
- // output
- // Array ( [yellow] => Banana )
- ?>
使用数组的过程中经常要遍历数组通常需要遍历数组并获得各个键或值(或者同时获得键和值), 所以毫不奇怪, PHP 为此提供了一些函数来满足需求许多函数能完成两项任务, 不仅能获取当前指针位置的键或值, 还能将指针移向下一个适当的位置
10. 获取当前数组键 key()
key()函数返回 input_array 中当前指针所在位置的键其形式如下:
代码如下:
mixed key(array array)
下面的例子通过迭代处理数组并移动指针来输出 $fruits 数组的键:
代码如下:
- $fruits = array("apple"=>"red", "banana"=>"yellow");
- while ($key = key($fruits)) {
- printf("%s", $key);
- next($fruits);
- }
- // apple
- // banana
注意, 每次调用 key()时不会移动指针为此需要使用 next()函数, 这个函数的唯一作用就是完成推进指针的任务
11. 获取当前数组值 current()
current()函数返回数组中当前指针所在位置的数组值其形式如下:
代码如下:
mixed current(array array)
下面修改前面的例子, 这一次我们要获取数组值:
代码如下:
- $fruits = array("apple"=>"red", "banana"=>"yellow");
- while ($fruit = current($fruits)) {
- printf("%s", $fruit);
- next($fruits);
- }
- // red
- // yellow
12. 获取当前数组键和值 each()
each()函数返回 input_array 的当前键 / 值对, 并将指针推进一个位置其形式如下:
代码如下:
array each(array array)
返回的数组包含四个键, 键 0 和 key 包含键名, 而键 1 和 value 包含相应的数据如果执行 each()前指针位于数组末尾, 则返回 false
代码如下:
- $fruits = array("apple", "banana", "orange", "pear");
- print_r ( each($fruits) );
- // Array ( [1] => apple [value] => apple [0] => 0 [key] => 0 )
each() 经常和 list() 结合使用来遍历数组本例与上例类似, 不过循环输出了整个数组:
代码如下:
- $fruits = array("apple", "banana", "orange", "pear");
- reset($fruits);
- while (list($key, $val) = each($fruits))
- {
- echo "$key => $val";
- }
- // 0 => apple
- // 1 => banana
- // 2 => orange
- // 3 => pear
因为将一个数组赋值给另一个数组时会重置原来的数组指针, 因此在上例中如果我们在循环内部将 $fruits 赋给了另一个变量的话将会导致无限循环
这就完成了数组的遍历
查找筛选与搜索数组元素是数组操作的一些常见功能下面来介绍一下几个相关的函数
13. in_array()函数
in_array()函数在一个数组汇总搜索一个特定值, 如果找到这个值返回 true, 否则返回 false 其形式如下:
代码如下:
boolean in_array(mixed needle,array haystack[,boolean strict]);
来看下面的例子, 查找变量 apple 是否已经在数组中, 如果在, 则输出一段信息:
代码如下:
- $fruit = "apple";
- $fruits = array("apple","banana","orange","pear");
- if( in_array($fruit,$fruits) )
- echo "$fruit 已经在数组中";
第三个参数可选, 它强制 in_array()在搜索时考虑类型
14. array_key_exists()函数
如果在一个数组中找到一个指定的键, 函数 array_key_exists()返回 true, 否则返回 false 其形式如下:
代码如下:
boolean array_key_exists(mixed key,array array);
下面的例子将在数组键中搜索 apple, 如果找到, 将输出这个水果的颜色:
代码如下:
- $fruit["apple"] = "red";
- $fruit["banana"] = "yellow";
- $fruit["pear"] = "green";
- if(array_key_exists("apple", $fruit)){
- printf("apple's color is %s",$fruit["apple"]);
- }
- //apple's color is red
15. array_search()函数
array_search()函数在一个数组中搜索一个指定的值, 如果找到则返回相应的键, 否则返回 false 其形式如下:
代码如下:
mixed array_search(mixed needle,array haystack[,boolean strict])
下面的例子在 $fruits 中搜索一个特定的日期(December 7), 如果找到, 则返回相应州的有关信息:
代码如下:
- $fruits["apple"] = "red";
- $fruits["banana"] = "yellow";
- $fruits["watermelon"]="green";
- $founded = array_search("green", $fruits);
- if($founded)
- printf("%s was founded on %s.",$founded, $fruits[$founded]);
- //watermelon was founded on green.
16. array_keys()函数
array_keys()函数返回一个数组, 其中包含所搜索数组中找到的所有键其形式如下:
代码如下:
array array_keys(array array[,mixed search_value])
如果包含可选参数 search_value, 则只会返回与该值匹配的键下面的例子将输出 $fruit 数组中找到的所有数组:
代码如下:
- $fruits["apple"] = "red";
- $fruits["banana"] = "yellow";
- $fruits["watermelon"]="green";
- $keys = array_keys($fruits);
- print_r($keys);
- //Array ( [0] => apple [1] => banana [2] => watermelon )
17. array_values()函数
array_values()函数返回一个数组中的所有值, 并自动为返回的数组提供数值索引其形式如下:
代码如下:
array array_values(array array)
下面的例子将获取 $fruits 中找到的各元素的值:
代码如下:
- $fruits["apple"] = "red";
- $fruits["banana"] = "yellow";
- $fruits["watermelon"]="green";
- $values = array_values($fruits);
- print_r($values);
- //Array ( [0] => red [1] => yellow [2] => green )
有时候我们需要扩展一个数组, 或者删掉数组的一部分, PHP 为扩展和缩小数组提供了一些函数对于那些希望模仿各种队列实现 (FIFOLIFO) 的程序员来说, 这些函数可以提供便利顾名思义, 从这些函数的函数名 (pushpopshift 和 unshift) 就清楚地反映出其作用
PS: 传统的队列是一种数据结构, 删除元素与加入元素的顺序相同, 就称为先进先出, 或 FIFO 相反, 栈是另外一种数据结构, 其中删除元素的顺序与加入时的顺序相反, 这成为后进先出, 或 LIFO
18. 在数组头添加元素
array_unshift()函数在数组头添加元素所有己有的数值键都会相应地修改, 以反映其在数组中的新位置, 但是关联键不受影响其形式如下:
代码如下:
int array_unshift(array array,mixed variable[,mixed variable])
下面这个例子在 $fruits 数组前面添加了两种水果:
代码如下:
- $fruits = array("apple","banana");
- array_unshift($fruits,"orange","pear")
- // $fruits = array("orange","pear","apple","banana");
19. 在数组尾添加元素
array_push()函数的返回值是 int 型, 是压入数据后数组中元素的个数, 可以为此函数传递多个变量作为参数, 同时向数组压入多个变量其形式为:
代码如下:
(array array,mixed variable [,mixed variable...])
下面这个例子在 $fruits 数组中又添加了两个水果:
代码如下:
- $fruits = array("apple","banana");
- array_push($fruits,"orange","pear")
- //$fruits = array("apple","banana","orange","pear")
20. 从数组头删除值
array_shift()函数删除并返回数组中找到的元素其结果是, 如果使用的是数值健, 则所有相应的值都会下移, 而使用关联键的数组不受影响其形式为
代码如下:
mixed array_shift(array array)
下面的例子删除了 $fruits 数组中的第一个元素 apple:
代码如下:
- $fruits = array("apple","banana","orange","pear");
- $fruit = array_shift($fruits);
- // $fruits = array("banana","orange","pear")
- // $fruit = "apple";
21. 从数组尾删除元素
array_pop()函数删除并返回数组的最后一个元素其形式为:
代码如下:
mixed array_pop(aray target_array);
下面的例子从 $states 数组删除了最后的一个州:
代码如下:
- $fruits = array("apple","banana","orange","pear");
- $fruit = array_pop($fruits);
- //$fruits = array("apple","banana","orange");
- //$fruit = "pear";
来源: https://www.php1.cn/detail/php-d8cbe1b10f.html