PHP:数组操作函数array_walk()和array_map()

array_map()的函数原型为:array array_map ( callback callback, array arr1 [, array
...] )

array_map() 返回一个数组,该数组包含了arr1中的所有单元经过callback作用过之后的单元。callback接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

 callback函数就是array_map所将调用来处理元素单元函数,应以字符串的形式将函数名传递给array_map()

  如:(php官方手册所给出的代码)

        <?php
            function cube($n)
            {
                return($n * $n *
$n);
            }

$a = array(1,
2, 3, 4, 5);
            $b
= array_map("cube",
$a);
            print_r($b);
        ?>

    cube即为callback函数 ,且array_map的callback函数的参数每一个应均为数组的元素,也就是array_map()除了第一个参数外,其余参数应均为数组且应与回调函数的参数个数一样.

    

<?php
	//callback 1
	function  check($n)
	{
		//array_mapcallback的参数为数组的元素,
		//也就是callback中有几个参数array_map就应传入几个数组
		if($n>100)
		{
			return  $n-10;
		}else 
		{
			return  $n;
		}
	}
	//callback 2
	function  add($a,$b)
	{
		return  $a+$b;
	}

	$arr = array(101,85,35,105,99,109);//
	var_dump($arr);
	$brr = array(1,2,3,4,5,6);
	$arr = array_map("check", $arr);
	$brr = array_map("add", $arr,$brr);

	print_r($arr);
	echo "<br/>";
	print_r($brr);

?>

输出结果

array (size=6)
  0 => int 101
  1 => int 85
  2 => int 35
  3 => int 105
  4 => int 99
  5 => int 109

Array (    [0] => 91    [1] => 85    [2] => 35    [3] => 95    [4] => 99    [5] => 99 )
Array (    [0] => 92    [1] => 87    [2] => 38    [3] => 99    [4] => 104    [5] => 105 )

========================================================================================

                        我是分割线

========================================================================================


    与array_map()不同array_walk()的返回值是布尔型,也就是如果想要修改数组的数据,应该在callback函数上做手脚(也就是引用)

   array_walk()会将数组的元素的值,以及键值传递给callback函数,此外还允许传递其类型的数据给callback函数.

   以下为其原型以及官方文档:

bool array_walk ( array &array, callback funcname [,
mixed userdata] )

如果成功则返回 TRUE,失败则返回 FALSE

将用户自定义函数funcname应用到array数组中的每个单元。典型情况下funcname接受两个参数。array参数的值作为第一个,键名作为第二个。如果提供了可选参数userdata,将被作为第三个参数传递给 callbackfuncname

如果funcname函数需要的参数比给出的多,则每次 array_walk() 调用funcname时都会产生一个
E_WARNING 级的错误。这些警告可以通过在 array_walk() 调用前加上 PHP 的错误操作符 @ 来抑制,或者用 error_reporting()

注: 如果funcname需要直接作用于数组中的值,则给funcname的第一个参数指定为引用。这样任何对这些单元的改变也将会改变原始数组本身。

注: 将键名和 userdata 传递到funcname中是 PHP 4.0
新增加的。

array_walk() 不会受到array内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置。

用户不应在回调函数中改变该数组本身。例如增加/删除单元,unset 单元等等。如果 array_walk() 作用的数组改变了,则此函数的的行为未经定义,且不可预期。

以下是我自己写的一个简单的例子:

<?php
	function alter(&$value,$key,$userdata)
	{
	        //在此处不对元素值做任何修改,如果想要修改则需像我一样给参数加上引用
		echo $key.$userdata.$value.‘<br/>‘;
	}
	$arr = array("a"=>"A","b"=>"B","c"=>"C","d"=>"D");
	//array_walk -- 对数组中的每个成员应用用户函数
	//函数原型:bool array_walk ( array &array, callback funcname [, mixed userdata] )
	//第一个参数为 数组
	//第二个参数为 callback函数名,
	//第三个参数为 可选参数(将传递给所callback的函数)
	//==============================================================================
	//array_map()将传递callback 函数的 的
	//第一个参数是元素的值,如需修改则应加上 &操作符
	//第二个参数为键值,如需修改则作如上处理
	//第三个参数为用户自己传递给函数的数据(即array_walk()中的第三个参数)

	array_walk($arr,‘alter‘,".is.");

?>

输出
a.is.A
b.is.B
c.is.C
d.is.D

----------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------    

   



时间: 2024-08-09 10:43:43

PHP:数组操作函数array_walk()和array_map()的相关文章

PHP:数组操作函数array_count_values()的实现

    PHP作为一门弱类型的脚本语言,其变量无需声明,即用即得,其数组更是与其他强类型语言相差巨大,比如PHP数组中的关联键和数值键,其中最有趣的莫过于关联键了,这是在C++或JAVA中无法见到的,而且PHP还提供诸多强大的数组操作函数,比如   array_values()//可以剥离数组中的关联键和数值键,或得有其元素的值所组成的数组 array_keys()//获得所有的关联键和数值键  利用这两个函数就可以非常方便简单的实现  array_count_values()函数  思路就是先

PHP:常用PHP数组操作函数

php为我们提供了丰富的数组操作函数,用这些函数可以非常方便的实现我们所想实现的功能. 添加和删除数组元素 添加元素的方法 array_unshift(array array,mixed var [,mixed var...]) 在数组头添加元素,所有的数值键会被相应的修改,但关联键不会受到影响 array_push(array array,mixed var [,mixed var.....]) 在数组尾添加元素 删除数组元素的方法 array_shift(array array) 删除数组头

JavaScript中常见的数组操作函数及用法

昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下,这样方便大家准备参考.如果恰好你也在准备各种笔试,希望对你有所帮助.同时,也欢迎补充. 1.数组创建 创建数组应该是最简单的了,有用数组字面量创建和数组构造函数两种方法,见下: var array1 = new Array(); var array2 = []; 上面是创建数组的最常见的两种方法,其中第二种方法因为简单直观而被开发者推崇.其中,

【五】PHP数组操作函数(未完)

1.输出数组的结构:bool print_r(数组); $arr=array('jack','mike','tom'); print_r($arr);//Array ( [0] => jack [1] => mike [2] => tom ) 2.如何声明二位数组? $arr=array('name'=>array('jack','mike'),'sex'=>array('man','woman')); print_r($arr);//Array ( [name] =>

C#二进制字节数组操作函数 截取字节数组SubByte

/// <summary> /// 截取字节数组 /// </summary> /// <param name="srcBytes">要截取的字节数组</param> /// <param name="startIndex">开始截取位置的索引</param> /// <param name="length">要截取的字节长度</param> ///

JavaScript 数组操作函数--转载+格式整理

JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,concat的总结.身为一个有点完美主义的强迫症患者来说,原文的格式,差点杀死我.so,这篇文章就出来了……原文:传送门. 一.push 和 pop 这两个函数都是对数组从尾部进行压入或弹出操作. push(arg1,arg2,...)可以每次压入一个或多个元素,并返回更新后的数组长度. 注意:如果参数也是

数组操作函数7!

array_unique()    剔除数组重复项,生成新数组 数组后增加元素--在数组后加个中括号[] array_unshift()    在数组头部插入元素,返回int值 array_shift()    返回删除的元素,从头部开始删除,如果删除失败返回null (如果第一个元素为0时,用is_null()函数判断) array_pop()    从底部删除一个元素. unset()    删除变量(已知数组元素个数) array_keys()    得到数组的键名,并返回以数组形式 ar

数组操作函数8

range()    生成一个包含指定范围的数组,第三个参数是步长值. array_count_values()    统计数组中键值出现的次数,返回统计的数组 array_pad()    数组的填充函数,类似字符串填充函数str_pad() array_product()    对数组中的键值进行乘积运算,返回数值类型 reset()    将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值 array_push()    数组的入栈,在数组的末端增加个或多个元素 array

量化投资_Multicharts数组操作函数_append()追加函数(自定义)

1. Multicharts中关于数组的操作比较麻烦,而且当中所谓的动态数组的定义并不是像其他语言那种的概念.因此要对数组进行元素“”追加“”的话,需要重新更改数组的索引,然后再最后一个位置添加value.这样操作是比较繁琐而且不清晰的. 2. 但是比如像Python语言中,列表的操作,可以直接采用像 变量.appen(值),这样的方式进行元素的添加,这样非常的方便. 3. append函数,本人把Multicharts中关于数组元素的追加进行封装操作. 4. 原先的设计:采用value1简单的