PHP:第四章——PHP数组处理函数

<pre>
<?php
//数组处理函数
header("Content-Type:text/html;charset=utf-8");
//compact();建立一个数组,包含变量名和他们的值。
//例1:
/*$a=1;$b=2;$c=3;
$arr=compact('a','b','c');
print_r($arr);*/
/*输出:Array([a] => 1 [b] => 2 [c] => 3)*/

//例2:
/*$a=1;$b=2;$c=3;
$abc=array('a','b','c');
$arr=compact($abc);
print_r($arr);*/
/*输出:Array([a] => 1 [b] => 2 [c] => 3)*/

//例3:
/*$a=1;$b=2;$c=3;
$php='PHP';
$abc=array('a','B','c',array('php','seo'));
$arr=compact($abc);
print_r($arr);*/
/*输出:Array([a] => 1 [c] => 3 [php] => PHP)*/

//extract();从数组中将变量导入到当前的符号表。
//功能:本函数用来将变量从数组中导入到当前的符号表中,键名当作变量名,值作为变量的值。
/*函数原形:int extract ( array &$var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix = NULL ]] )
检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。 
参数说明:必须使用关联数组,数字索引的数组将不会产生结果,除非用了 EXTR_PREFIX_ALL 或者 EXTR_PREFIX_INVALID。 
extract_type:对待非法/数字和冲突的键名的方法将根据 extract_type 参数决定。
可以是以下值之一: 
EXTR_OVERWRITE    如果有冲突,覆盖已有的变量。  
EXTR_SKIP    如果有冲突,不覆盖已有的变量。  
EXTR_PREFIX_SAME    如果有冲突,在变量名前加上前缀 prefix。  
EXTR_PREFIX_ALL    给所有变量名加上前缀 prefix。  
EXTR_PREFIX_INVALID    仅在非法/数字的变量名前加上前缀 prefix。  
EXTR_IF_EXISTS    仅在当前符号表中已有同名变量时,覆盖它们的值。其它的都不处理。 
EXTR_PREFIX_IF_EXISTS仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。  
EXTR_REFS    将变量作为引用提取。这有力地表明了导入的变量仍然引用了 

如果没有指定 extract_type,则被假定为 EXTR_OVERWRITE。 
  
注意事项: 
prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时需要。 如果附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。前缀和数组键名之间会自动加上一个下划线。
*/
//例:
/*$arr=array('a'=>1,'b'=>2,'c'=>3);
extract($arr);
echo $a,$b,$c;//输出:123*/

//list();把数组中的值赋给一些变量;
//例:
/*$arr=array(1,2,3);
list($a,$b,$c)=$arr;
echo $a,$b,$c;//输出:123*/
//例:
/*$arr=array(4=>'肆',3=>'叁',2=>'贰',1=>'壹',0=>'零');
list($a,$b,$c)=$arr;
echo $a,$b,$c;//输出:零 壹 贰*/
//这种赋值并不是从左到右进行赋值,而是根据索引从0开始依次索引。

//range  建立一个包含指定范围单元的数组
/*函数原形:array range ( mixed $start , mixed $end [, number $step = 1 ] )
参数说明:
start    序列的第一个值。
limit    序列结束于 limit 的值。
step    如果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1。
返回的数组中从 start 到 limit 的单元,包括它们本身。
*/
/*$arr=range(1,6,2);
print_r($arr);*/
/*
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
)
*/

/*知识点五:key  从关联数组中取得键名
原形:mixed key ( array &$array )
功能:key() 函数返回数组中内部指针指向的当前单元的键名。 但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,key() 会返回 NULL。*/
//例:
/*$a=array('zg'=>'中国','rm'=>'人民');
var_dump(key($a));//输出:string 'zg' (length=2)
*/
/*知识点七:current, each, end, next, pos, prev, reset  */
/*
1)  current — 返回数组中的当前单元 
原形:mixed current ( array &$array )
别名函数:pos
每个数组中都有一个内部的指针指向它"当前的"单元,初始指向插入到数组中的第一个单元。
返回值:返回当前被内部指针指向的数组单元的值,并不移动指针。
        如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
注意:此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。
      应使用 === 运算符来测试此函数的返回值。    
*/
/*$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport);    // $mode = 'bike';
$mode = current($transport); // $mode = 'bike';
$mode = prev($transport);    // $mode = 'foot';
$mode = end($transport);     // $mode = 'plane';
$mode = current($transport); // $mode = 'plane';

$arr = array();
var_dump(current($arr)); // bool(false)

$arr = array(array());
var_dump(current($arr)); // array(0) { }*/

/*2) each — 返回数组中当前的键/值对并将数组指针向前移动一步
原形:array each ( array &$array )
在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。
如果要再用 each 遍历数组,必须使用 reset()。
返回值:
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。
键值对被返回为四个单元的数组,键名为0,1,key和 value。
单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。
如果内部指针越过了数组的末端,则 each() 返回 FALSE。*/

/*$transport = array('foot', 'bike', 'car', 'plane');
$a = each($transport) ;
print_r($a);*/
/*输出:Array ( [1] => foot [value] => foot [0] => 0 [key] => 0 )*/
//each() 经常和 list() 结合使用来遍历数组
/*$school = array('d' => '动', 'l' => '没', 'x' => '学', 'y' => '院');
reset($school);
while (list($key, $val) = each($school)) {
    echo "$key => $val
";
}*/
//输出:d => 动  l => 没  x => 学 y => 院

/*3) end — 将数组的内部指针指向最后一个单元
mixed end ( array &$array )
功能:该数组是通过引用传递的,因为它会被这个函数修改。 
这意味着你必须传入一个真正的变量,而不是函数返回的数组,因为只有真正的变量才能以引用传递。 
返回值:返回最后一个元素的值,或者如果是空数组则返回 FALSE。
*/
/*$arr=array('zg'=>'中国','rm'=>'人民');
var_dump(end($arr));//输出:string '人民' (length=6)
*/
/*4) next — 将数组中的内部指针向前移动一位
next() 和 current() 的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。
这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。  
原形:mixed next ( array &$array )
返回值:返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回 FALSE。
注意:函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。
应使用 === 运算符来测试此函数的返回值。
并且要注意如果数组中含有false值,用在遍历时候可能会产生不是我们想象的结果。
*/  
/*$arr = array('d', 'l', false, 'y'); 
while(list($k,$v) = each($arr)){
    echo $k, $v ,"<br>";
}
//输出:0d  1l  2  3y*/

/*5) prev — 将数组的内部指针倒回一位
原形:mixed prev ( array &$array )
prev() 和 next() 的行为类似,只除了它将内部指针倒回一位而不是前移一位。
返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回 FALSE。
同样的对于元素为false或等价于false的请使用 each配合list进行遍历或使用foreach*/
/*6) reset  — 将数组的内部指针指向第一个单元
原形:mixed reset ( array &$array )
功能:将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值。
返回值:返回数组第一个单元的值,如果数组为空则返回 FALSE。 */

$arr = array('动', '美丽', '学', '院'); 
echo next($arr);
echo reset($arr);
//输出:美丽,动

/*知识点六:array_reduce — 用回调函数迭代地将数组简化为单一的值
原形:mixed array_reduce ( array $input , callable $function [, mixed $initial = NULL ] )
回调函数格式:mixed callback ( mixed &$result , mixed $item )
参数:如果指定了可选参数 initial,该参数将被当成是数组中的第一个值来处理,
或者如果数组为空的话就作为最终返回值。
返回值:返回结果值            
*/
$a =range(1,10);
$b = array_reduce($a,'F') ;          
echo $b;        //结果55

function F($rs,$v){
    $rs += $v;
    return $rs;            
}


?>
原文地址:https://www.cnblogs.com/yiweiyihang/p/7157704.html