array array_pad(array $input
, int $pad_size
, mixed$pad_value
)
返回 input
的一个拷贝,并用 pad_value
将其填补到pad_size
指定的长度。如果pad_size
为正,则数组被填补到右侧,如果为负则从左侧开始填补。如果pad_size
的绝对值小于或等于input
数组的长度则没有任何填补。有可能一次最多填补 1048576 个单元。
$input = array(12, 10, 9);
$result = array_pad($input, 5, 0);
// result is array(12, 10, 9, 0, 0)
$result = array_pad($input, -7, -1);
// result is array(-1, -1, -1, -1, 12, 10, 9)
$result = array_pad($input, 2, "noop");
// not padded
mixed array_pop ( array
&$array
)
弹出并返回 array
数组的最后一个单元,并将数组 array
的长度减一。如果array
为空(或者不是数组)将返回NULL
。
Example #1 array_pop() 例子
<?php
$stack = array("orange","banana","apple","raspberry");
$fruit =array_pop($stack);
print_r($stack);
?>
经过此操作后,$stack 将只有 3 个单元:
Array ( [0] => orange [1] => banana [2] => apple )
array_product() 以整数或浮点数返回一个数组中所有值的乘积。如果包含非数字(‘1’属于数字)的元素则最终结果为0;
Example #1 array_product() 例子
<?php
$a = array(2,4,6,8);
echo "product(a) = " .array_product($a) ."\n";
?>
以上例程会输出:
product(a) = 384
array_push() 将array
当成一个栈,并将传入的变量压入array
的末尾。array
的长度将根据入栈变量的数目增加。和如下效果相同:
<?php
$array[] = $var;
?>
var
重复以上动作。
返回数组新的单元总数。
Example #1 array_push() 例子
<?php
$stack = array("orange","banana");
array_push($stack,"apple","raspberry");
print_r($stack);
?>
本例将使 $stack 具有如下单元:
Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )
Note: 如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
Note: 如果第一个参数不是数组,array_push()将发出一条警告。这和$var[] 的行为不同,后者会新建一个数组。
array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用。它接受input
作为输入数组和一个可选的参数num_req
,指明了你想取出多少个单元 - 如果没有指定,默认为 1。
如果你只取出一个,array_rand()返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。
Example #1 array_rand() 例子
<?php
srand((float) microtime() *10000000);
$input = array("Neo","Morpheus","Trinity","Cypher","Tank");
$rand_keys =array_rand($input,2);
print $input[$rand_keys[0]] . "\n";
print $input[$rand_keys[1]] . "\n";
?>
array_reduce() 将回调函数function
迭代地作用到input
数组中的每一个单元中,从而将数组简化为单一的值。如果指定了可选参数initial
,该参数将被当成是数组中的第一个值来处理,或者如果数组为空的话就作为最终返回值。如果数组为空并且没有传递initial
参数,array_reduce() 返回NULL
。
Example #1 array_reduce() 例子
<?php
function rsum($v,$w)
{
$v +=$w;
return $v;
}
function rmul($v,$w)
{
$v *=$w;
return $v;
}
$a = array(1,2,3,4,5);
$x = array();
$b =array_reduce($a,"rsum");
$c =array_reduce($a,"rmul",10);
$d =array_reduce($x,"rsum",1);
?>
这将使 $b 的值为 15,$c 的值为1200(= 10*1*2*3*4*5),以及$d 的值为 1。
array array_replace_recursive( array &$array
, array&$array1
[, array &$array2
[,array &$...
]] )
使用后面数组元素的值替换第一个数组 array
的值。如果一个键存在于第一个数组同时也存在于第二个数组,它的值将被第二个数组中的值替换。如果一个键存在于第二个数组,但是不存在于第一个数组,则会在第一个数组中创建这个元素。如果一个键仅存在于第一个数组,它将保持不变。如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。
array_replace_recursive() 是递归的:它将遍历数组并将相同的处理应用到数组的内部值。
如果数组 array
中的值是标量,它的值将被第二个数组array1
中的值替换,它可能是一个标量或者数组。如果 array
和array1
中的值都是数组,array_replace_recursive() 函数将递归地替换它们各自的值。
&$array
,
array&$array1
[,
array &$array2
[,
array &$...
]] )
函数使用后面数组元素的值替换第一个 array
数组的值。如果一个键存在于第一个数组同时也存在于第二个数组,它的值将被第二个数组中的值替换。如果一个键存在于第二个数组,但是不存在于第一个数组,则会在第一个数组中创建这个元素。如果一个键仅存在于第一个数组,它将保持不变。如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。
array_replace() 是非递归的:它将第一个数组的值进行替换而不管第二个数组中是什么类型。
Example #1 array_replace_recursive() 范例
<?php
$base = array('citrus'=> array( "orange") ,'berries' => array("blackberry","raspberry"), );
$replacements = array('citrus'=> array('pineapple'),'berries' => array('blueberry'));
$basket =array_replace_recursive($base,$replacements);
print_r($basket);
$basket =array_replace($base,$replacements);
print_r($basket);
?>
以上例程会输出:
Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry [1] => raspberry ) ) Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry ) )
Example #2 array_replace_recursive() 及其递归表现
<?php
$base = array('citrus'=> array("orange") ,'berries' => array("blackberry","raspberry"),'others' =>'banana' );
$replacements = array('citrus'=> 'pineapple','berries' => array('blueberry'),'others' => array('litchis'));
$replacements2 = array('citrus'=> array('pineapple'),'berries' => array('blueberry'),'others' =>'litchis');
$basket =array_replace_recursive($base,$replacements,$replacements2);
print_r($basket);
?>
以上例程会输出:
Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry [1] => raspberry ) [others] => litchis )
array array_reverse( array $array
[, bool $preserve_keys
] )
接受数组 array
作为输入并返回一个单元为相反顺序的新数组,如果preserve_keys
为 TRUE
则保留原来的键名。
Example #1 array_reverse() 例子
<?php
$input = array("php",4.0, array("green","red"));
$result =array_reverse($input);
$result_keyed =array_reverse($input,TRUE);
?>
这将使 $result 和 $result_keyed 具有相同的单元,但是注意键名的区别。$result和$result_keyed 的打印输出显示分别为:
Array ( [0] => Array ( [0] => green [1] => red ) [1] => 4 [2] => php ) Array ( [2] => Array ( [0] => green [1] => red ) [1] => 4 [0] => php )
$needle
,
array$haystack
[,
bool$strict
] )
在 haystack
中搜索needle
参数并在找到的情况下返回键名,否则返回 FALSE
。
Note:
如果可选的第三个参数
如果strict
为TRUE
,则 array_search() 还将在haystack
中检查needle
的类型。needle
在haystack
中出现不止一次,则返回第一个匹配的键。要返回所有匹配值的键,应该用 array_keys() 加上可选参数search_value
来代替。
<?php
$array = array(0=> 'blue',1 =>'red',2 =>'green',3 =>'red');
$key =array_search('green',$array);// $key = 2;
$key =array_search('red',$array);// $key = 1;
?>
mixed array_shift ( array &$array )
将 array
的第一个单元移出并作为结果返回,将 array
的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。如果array
为空(或者不是数组),则返回 NULL
。
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
返回
Array ( [0] => banana [1] => apple [2] => raspberry )array array_slice( array
$array
,
int $offset
[,
int $length
[,
bool$preserve_keys
]] )
返回根据 offset
和length
参数所指定的 array
数组中的一段序列。
如果 offset
非负,则序列将从 array
中的此偏移量开始。如果offset
为负,则序列将从 array
中距离末端这么远的地方开始。
如果给出了 length
并且为正,则序列中将具有这么多的单元。如果给出了length
并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset
开始一直到 array
的末端。
注意 array_slice() 默认将重置数组的键。自 PHP 5.0.2 起,可以通过将preserve_keys
设为 TRUE
来改变此行为。
<?php
$input = array("a","b","c","d","e");
$output =array_slice($input,2);// returns "c", "d", and "e"
$output =array_slice($input, -2,1);// returns "d"
$output =array_slice($input,0,3);// returns "a", "b", and "c"
// note the differences in the array keys
print_r(array_slice($input,2, -1));
print_r(array_slice($input,2, -1,true));
?>
以上例程会输出:
Array ( [0] => c [1] => d ) Array ( [2] => c [3] => d )
number array_sum ( array $array
)
array_sum() 将数组中的所有值的和以整数或浮点数的结果返回。(字符会转换成0)
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "\n";
返回值
sum(a) = 20 sum(b) = 6.9
array array_udiff_assoc ( array $array1
, array $array2
[, array $ ...
], callback $data_compare_func
)
array_udiff_assoc() 返回一个数组,该数组包括了所有在 array1
中但是不在任何其它参数数组中的值。注意和 array_diff() 与 array_udiff()不同的是键名也用于比较。数组数据的比较是用用户提供的回调函数进行的。在此方面和 array_diff_assoc() 的行为正好相反,后者是用内部函数进行比较的。
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
print_r($result);
返回
Array ( [0.1] => cr Object ( [priv_member:private] => 9 ) [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ) )
上例中可以看到键值对 "1" => new cr(4)同时出现在两个数组中因此不在本函数的输出中。
此比较是通过用户提供的回调函数来进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。
array array_udiff_uassoc ( array $array1
, array $array2
[, array $ ...
], callback $data_compare_func
, callback $key_compare_func
)
array_udiff_uassoc() 返回一个数组,该数组包括了所有在 array1
中但是不在任何其它参数数组中的值。注意和 array_diff() 与 array_udiff()不同的是键名也用于比较。数组数据的比较是用用户提供的回调函数 data_compare_func
进行的。在此方面和 array_diff_assoc()的行为正好相反,后者是用内部函数进行比较的。对键名(索引)的检查也是由回调函数 key_compare_func
进行的。这和 array_udiff_assoc() 的行为不同,后者是用内部函数比较索引的。
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
function comp_func_key($a, $b)
{
if ($a === $b) return 0;
return ($a > $b)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
print_r($result);
返回值
Array ( [0.1] => cr Object ( [priv_member:private] => 9 ) [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ) )
在上例中键值对 "1" => new cr(4)同时出现在两个数组中,因此不在本函数的输出中。要记住必须提供两个回调函数。
此比较是通过用户提供的回调函数来进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。
array array_udiff ( array $array1
, array $array2
[, array $ ...
], callback $data_compare_func
)
array_udiff() 返回一个数组,该数组包括了所有在 array1
中但是不在任何其它参数数组中的值。注意键名保持不变。数据的比较是用 data_compare_func
进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。这和 array_diff() 不同,后者使用了内部函数来比较数据。
<?php
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
print_r($result);
?>
输出
Array ( [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ) )