最近在学习PHP,工作中需要经常对字符串和数组进行操作,因此需要对数组和字符串函数进行学习,在此记录学习过程。
数组操作分为几个类型:
数组中元素指针的移动
next() :next() 函数把指向当前元素的指针移动到下一个元素的位置,并返回当前元素的值。如果内部指针已经超过数组的最后一个元素,函数返回 false。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . "<br />";
echo next($people);
?>
输出:
Peter
Joe
prev():prev()函数把指向当前元素的指针移动到上一个元素的位置,并返回当前元素的值。如果内部指针已经超过数组的第一个元素之前,函数返回 false。prev() 和 next() 的行为类似,不过它将内部指针倒回一位而不是前移一位。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . "<br />";
echo next($people) . "<br />";
echo prev($people);
?>
输出:
Peter
Joe
Peter
end():end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . "<br />";
echo end($people);
?>
输出:
Peter
Cleveland
reset():reset() 函数把数组的内部指针指向第一个元素,并返回这个元素的值。若失败,则返回 FALSE。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . "<br />";
echo next($people) . "<br />";
echo reset($people);
?>
输出:
Peter
Joe
Peter
current(): current() 函数返回当前被内部指针指向的数组元素的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . "<br />";
?>
输出:
Peter
- 数组元素增删改查
array_push():array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。
<?php
$a=array("Dog","Cat");
array_push($a,"Horse","Bird");
print_r($a);
?>
输出:
Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
注释:即使数组中有字符串键名,您添加的元素也始终是数字键。
注释:如果用 array_push() 来给数组增加一个单元,还不如用 $array[] =,因为这样没有调用函数的额外负担。
注释:如果第一个参数不是数组,array_push() 将发出一条警告。这和 $var[] 的行为不同,后者会新建一个数组。
array_shift():array_shift() 函数删除数组中的第一个元素,并返回被删除元素的值。
<?php
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo array_shift($a);
print_r ($a);
?>
输出:
Dog
Array ( [b] => Cat [c] => Horse )
array_pop():array_pop() 函数删除数组中的最后一个元素。
<?php
$a=array("Dog","Cat","Horse");
array_pop($a);
print_r($a);
?>
输出:
Array ( [0] => Dog [1] => Cat )
array_unshift():array_unshift() 函数在数组开头插入一个或多个元素。被加上的元素作为一个整体添加,这些元素在数组中的顺序和在参数中的顺序一样。该函数会返回数组中元素的个数。
<?php
$a=array("a"=>"Cat","b"=>"Dog");
array_unshift($a,"Horse");
print_r($a);
?>
输出:
Array ( [0] => Horse [a] => Cat [b] => Dog )
array_key_exists():array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。
<?php
$a=array("a"=>"Dog","b"=>"Cat");
if (array_key_exists("a",$a))
{
echo "Key exists!";
}
else
{
echo "Key does not exist!";
}
?>
输出:
Key exists!
in_array():in_array() 函数在数组中搜索给定的值。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
if (in_array("Glenn",$people))
{
echo "Match found";
}
else
{
echo "Match not found";
}
?>
输出:
Match found
array_search():array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。
<?php
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo array_search("Dog",$a);
?>
输出:
a
- 数组元素排序
ksort():ksort() 函数按照键名对数组排序,为数组值保留原来的键。可选的第二个参数包含附加的排序标志。若成功,则返回 TRUE,否则返回 FALSE。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
ksort($my_array);
print_r($my_array);
?>
输出:
Array
(
[a] => Dog
[b] => Cat
[c] => Horse
)
krsort():krsort() 函数将数组按照键逆向排序,为数组值保留原来的键。可选的第二个参数包含附加的排序标志。若成功,则返回 TRUE,否则返回 FALSE。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
krsort($my_array);
print_r($my_array);
?>
输出:
Array
(
[c] => Horse
[b] => Cat
[a] => Dog
)
asort():asort() 函数对数组进行排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。可选的第二个参数包含了附加的排序标识。如果成功则返回 TRUE,否则返回 FALSE。
php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
asort($my_array);
print_r($my_array);
?>
输出:
Array
(
[b] => Cat
[a] => Dog
[c] => Horse
)
arsort():arsort() 函数对数组进行逆向排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。可选的第二个参数包含了附加的排序标识。如果成功则返回 TRUE,否则返回 FALSE。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
arsort($my_array);
print_r($my_array);
?>
输出:
Array
(
[c] => Horse
[a] => Dog
[b] => Cat
)
- 数组中元素的运算
array_sum():array_sum() 函数返回数组中所有值的总和。如果所有值多是整数,则返回一个整数值。如果其中有一个或多个值是浮点数,则返回浮点数。
<?php
$a=array(0=>"5",1=>"15",2=>"25");
echo array_sum($a);
?>
输出:
45
array_product():array_product() 函数计算并返回数组中所有值的乘积。
<?php
$a=array(5,5);
echo(array_product($a));
?>
输出:
25
array_walk():array_walk() 函数对数组中的每个元素应用回调函数。如果成功则返回 TRUE,否则返回 FALSE。典型情况下 function 接受两个参数。array 参数的值作为第一个,键名作为第二个。如果提供了可选参数 userdata ,将被作为第三个参数传递给回调函数。
<?php
function myfunction($value,$key)
{
echo "The key $key has the value $value<br />";
}
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");
array_walk($a,"myfunction");
?>
输出:
The key a has the value Cat
The key b has the value Dog
The key c has the value Horse
<?php
function myfunction($value,$key,$p)
{
echo "$key $p $value<br />";
}
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");
array_walk($a,"myfunction","has the value");
?>
输出:
a has the value Cat
b has the value Dog
c has the value Horse
array_count_values():array_count_values() 函数用于统计数组中所有值出现的次数。本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
<?php
$a=array("Cat","Dog","Horse","Dog");
print_r(array_count_values($a));
?>
输出:
Array ( [Cat] => 1 [Dog] => 2 [Horse] => 1 )
数组合并,元素随机化
array_merge():array_merge() 函数把两个或多个数组合并为一个数组。如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>
输出:
Array ( [a] => Horse [b] => Cat [c] => Cow )
array_merge_recursive():array_merge_recursive() 函数与 array_merge() 函数 一样,将一个或多个数组的元素的合并起来,一个数组中的值附加在前一个数组的后面。并返回作为结果的数组。但是,与 array_merge() 不同的是,当有重复的键名时,值不会被覆盖,而是将多个相同键名的值递归组成一个数组。
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge_recursive($a1,$a2));
?>
输出:
Array (
[a] => Horse
[b] => Array ( [0] => Dog [1] => Cat )
[c] => Cow
)
array_combine():array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。
<?php
$a1=array("a","b","c","d");
$a2=array("Cat","Dog","Horse","Cow");
print_r(array_combine($a1,$a2));
?>
输出:
Array ( [a] => Cat [b] => Dog [c] => Horse [d] => Cow )
shuffle():shuffle() 函数把数组中的元素按随机顺序重新排列。若成功,则返回 TRUE,否则返回 FALSE。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
shuffle($my_array);
print_r($my_array);
?>
输出:
Array ( [0] => Cat [1] => Horse [2] => Dog )
- 数组其他函数