与变量相关扩展-数组(3)

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。    

使用此函数后会重置(reset())array 指针。

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
)

number array_product( array $array )

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


int array_push ( array &$array , mixed$var [, mixed$... ] )

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[] 的行为不同,后者会新建一个数组。     


mixed array_rand( array $input [, int $num_req ] )

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


mixed array_reduce( array $input , callback$function [, int$initial ] )

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 中的值替换,它可能是一个标量或者数组。如果 arrayarray1 中的值都是数组,array_replace_recursive() 函数将递归地替换它们各自的值。

array array_replace( array &$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_keysTRUE 则保留原来的键名。    

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
)
mixed array_search ( mixed $needle , array$haystack [, bool$strict ] )

haystack 中搜索needle 参数并在找到的情况下返回键名,否则返回 FALSE

Note:

如果可选的第三个参数 strict TRUE,则 array_search() 还将在haystack中检查 needle 的类型。

如果 needlehaystack中出现不止一次,则返回第一个匹配的键。要返回所有匹配值的键,应该用 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。    

使用此函数后会重置(reset())array 指针。

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

返回根据 offsetlength 参数所指定的 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
        )

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值