第三章 使用数组(5)
2016-07-23 18:55 yojiaku 阅读(208) 评论(0) 编辑 收藏 举报
- 在数组中浏览:each() , current() , reset() , end() , next() , pos() , prev()
每个数组都有一个内部指针指向数组中的当前元素。当使用 each() 函数时就间接地使用了这个指针。如果创建一个新数组,那么当前指针就将被初始化,并指向数组的第一个元素,调用 current($array_name) 将返回第一个元素。
调用 next() 或 each() 将使指针前移一个元素。调用 each($array_name) 会在指针前移一个位置之前返回当前元素。
next() 函数则不同——调用 next($array_name) 是将指针前移,然后返回新的当前元素。
reset() 函数将返回数组第一个元素的指针。
调用 end($array_name) 可将指针移到数组末尾。
reset() 和 end() 可分别返回数组的第一个元素和最后一个元素。
end() 和 prev() 可以反向遍历一个数组。 prev() 和 next() 相反,它是将当前指针往回移一个位置然后再返回新的当前元素。
//show the content of one array in the opposite way $array = array(1, 2, 3); $value = end($array); while($value){ echo "$value<br />"; $value = prev($array); }
显示效果:
对数组的每一个元素应用任何函数:array_walk()
有时候,我们想以相同方式使用或者修改数组中的每一个元素。 array_walk() 函数的功能就是这个。
array_walk() 原型:bool array_walk(array arr, string func, [mixed userdata])
array_walk() 需要先声明一个自己的函数。
参数解释:arr - 需要处理的数组;func - 用户自定义并将作用于数组中每个元素的函数;userdata - 可选参数,如果使用,它可以作为一个参数传递给我们自己的函数。
例子1:
//array_walk() function my_print($value){ echo "$value<br />"; } array_walk($array,'my_print');
解释:自定义函数 my_print() 表示将数组中每个元素显示在一个新行。
对于数组中的每个元素,array_walk() 将以关键字和保存在数组中的值作为参数
例子2:
$array2 = array(4, 5, 6); function my_multiply($value, $key, $factory){ $value *= $factory; echo $value." "; } array_walk($array2, 'my_multiply', 3);
解释:可以忽略my_multiply中的$key关键字。这里定义了名为 my_multiply() 的函数,它可以用所提供的乘法因子(这里是3)去乘以数组中的每个元素。需要 array_walk() 函数的第三个参数来传递这个乘法因子,所以在定义 my_multiply() 函数时
需要三个参数——一个数组元素值($value),一个数组元素的关键字($key),参数($factory)。
注意:这个例子与书中不同的是,我们传递参数,直接使用的$value,而书中使用的是&$value,但这种方式已经被PHP5.4移除了。
- 统计数组元素个数:count() , sizeof() , array_count_values()
sizeof() 是 count() 的别名,用法与之相同。
array_count_values():array array_count_values( array $input)——统计数中所有值出现的次数,返回一个数组,该数组用input数组中的值作为键名,改值在input数组中出现的次数作为值。
例如:
<?php $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); ?>
会输出:
Array ( [1] => 2 [hello] => 2 [world] => 1 )
表示 1 在array数组中出现了 2 次,hello 在array数组中出现了 2 次,world 在array数组中出现了 1 次。
- 将数组转换成标量变量:extract()
对于一个非数字索引数组,而该数组又有许多关键字-值对,可使用函数 extract() 将它们转换成一系列的标量变量。
extract(): extract(array var_array[, int extract_type] [, string prefix]);
通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量值则是数组中的值。
例子:
$array3 = array('key1'=>'value1', 'key2'=>'value2', 'key3'=>'value3'); extract($array3); echo "$key1 $key2 $key3";
输出结果为:value1 value2 value3
解释:这个数组具有三个元素,我们用extract() 函数创建了三个标量变量:$key1,$key2,$key3.