php追加数组-PHP操作字段(合并、拆分、追加、搜索、删除等)

1. 合并字段

array_merge() 函数将字段合并在一起并返回组合字段。 结果字段从第一个输入字段参数开始,并按照相邻链表中参数出现的顺序依次添加。 其方式是:

array array_merge (array array1 array2…,arrayN)

此函数合并一个或多个字段的单元格,并将一个链表中的值附加到前一个链表的旁边。 返回结果链接列表。

如果输入链表具有相同的字符串键值,则该键旁边的值将覆盖之前的值。 但是,如果链表包含数字键值,则后面的值不会覆盖原始值,而是会追加到其后面。

如果仅给出一个链表并且对该字段进行数字索引,则键将以连续形式重新索引。

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

程序示例如下:

 "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 )
?>

现在关键的苹果指向一个链表,链表是一个由两个颜色值组成的索引字段。

3. 连接字段

array_combine() 函数将获取一个新字段,其中包含提交的键和相应值的数组。 方法是:

array array_combine(array keys,array values)

注意两个输入字段必须大小相同且不能为空。示例如下

 red [banana] => yellow [orange] => orange )
?>

4. 分割字段array_slice()

array_slice() 函数将返回链表的一部分,从键偏移量开始,到偏移量+长度结束。 道路:

array array_slice (array array, int offset[,int length])

当offset为正值时,分裂将从链表开头的offset位置开始; 如果offset为负值,则从链表末尾的offset位置开始分裂。 如果省略可选参数长度,则分割将从偏移量开始并转到链表的最后一个元素。 如果给定了 length 并且为负数,则它将在距离链表开头的 offset+length 处结束。 相反,如果给定 length 并且为正,则以 count(input_array)-|length| 结束从链表开头算起的位置。 考虑一个例子

 Pear [1] => Grape [2] => Lemon [3] => Watermelon )
?>

然后我们使用下一个负宽度:

 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 + length 处结束。 相反,如果给出了 length 并且为负数,则连接将在距离链表开头的 count(input_array)-length 位置处结束。 示例如下:

 Apple [1] => Banana [2] => Orange [3] => Pear ) 
// Array ( [0] => Grape [1] => Lemon [2] => Watermelon )
?>

可选参数 replacement 可用于指定要替换目标部分的字段。 示例如下:

 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 中的所有蔬菜:

 Apple )
?>

仅当两个元素相等且数据类型相同时, array_intersect() 函数才会认为它们相同。

7.相关字段的交集 array_intersect_assoc()

函数 array_intersect_assoc() 与 array_intersect() 基本相同,只不过它在比较时还考虑了链表的键。 因此,结果列表中仅返回第一个字段中出现且也出现在所有其他输入字段中的键/值对。

形式如下:

array array_intersect_assoc(array array1,array array2[,arrayN…])

以下示例返回出现在 $fruit1 字段中以及出现在 $fruit2 和 $fruit3 中的所有键/值对:

"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…])

示例如下:

 Banana )
?>

9.关联字段的差异array_diff_assoc()

函数 array_diff_assoc() 与 array_diff() 基本相同,只不过它在比较时也考虑链表的键。 因此,只有出现在第一个链表中但未出现在其他输入字段中的键/值对才会返回到结果字段。 就是这样:

array array_diff_assoc(array array1,array array2[,arrayN…])

以下示例仅返回 [yellow] => Banana,因为此特定键/值对出现在 $fruit1 中,但不存在于 $fruit2 或 $fruit3 中。

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

下面的反例通过迭代链表并连接needles来输出$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.获取当前链表key和valueeach()

each() 函数返回 input_array 的当前键/值对,并将指针前进一个位置。 就是这样:

array each(array array)

返回的链表包含四个键,键0和键包含键值,键1和值包含对应的数据。 如果在执行each() 之前指针位于列表末尾,则返回 false。

$fruits = array("apple", "banana", "orange", "pear");
print_r ( each($fruits) );
// Array ( [1] => apple [value] => apple [0] => 0 [key] => 0 )

each() 经常与 list() 结合使用来遍历链表。 这个例子和前面的例子类似php追加数组,但是循环输出整个链表:

$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赋值给另一个变量php追加数组,就会导致无限循环。

这样就完成了链表的遍历。

查找、过滤和搜索数组元素是链表操作的一些常见功能。 下面是一些相关的函数。

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 中搜索特定日期(12 月 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提供了一些扩展和收缩链表的函数。 这些函数对于希望模拟各种队列实现(先进先出、后进先出)的程序员来说非常方便。 顾名思义,这个函数的函数名(push、pop、shift、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";