PHP中的array_map()函数

1. PHP中的array_map()函数介绍

在PHP中,array_map()函数可以让开发者对数组中的每个元素执行指定的函数,将所有元素作为参数传递给该函数,并返回一个新的数组。该函数的语法为:

array_map ( callable $callback , array $arr1 [, array $... ] ) : array

其中$callback参数指定要执行的函数,$arr1是要操作的数组,$...后面可以传入多个数组,表示多个数组的元素依次作为函数参数。

2. array_map()函数的基本用法

2.1 对数组中每个元素进行字符串连接

下面的例子展示了如何使用array_map()函数对数组中每个字符串元素进行连接,并返回新的连接后的数组:

$arr = array('Hello', 'World', 'PHP');

function connectString($value)

{

return $value . '-Connected';

}

$newArr = array_map('connectString', $arr);

print_r($newArr);

输出结果为:

Array

(

[0] => Hello-Connected

[1] => World-Connected

[2] => PHP-Connected

)

在上面的代码中,首先定义了一个函数connectString(),它将接收到的字符串参数与'-Connected'字符串进行连接并返回。然后调用array_map()函数,并将connectString()函数和数组$arr作为参数传递给该函数,将连接后的结果存储在新数组$newArr中。

2.2 对多个数组元素执行指定的函数

除了可以对单个数组的元素执行指定函数,array_map()函数还可以对多个数组合并后的元素执行函数。下面的例子演示了如何对两个数组中的对应元素执行加法操作,并返回对应结果的数组:

$arr1 = array(1, 2, 3);

$arr2 = array(4, 5, 6);

function add($x, $y)

{

return $x + $y;

}

$newArr = array_map('add', $arr1, $arr2);

print_r($newArr);

输出结果为:

Array

(

[0] => 5

[1] => 7

[2] => 9

)

在上面的例子中,首先定义了一个函数add(),该函数接收两个参数,分别是要相加的两个数。然后调用array_map()函数,并将add()函数和两个数组$arr1$arr2作为参数传递给该函数,将对应结果存储在新数组$newArr中。

3. array_map()函数的高级用法

3.1 对象方法作为回调函数

array_map()函数还支持将对象的方法作为回调函数进行传递。下面的例子展示了如何使用对象方法对数组中的数值进行平方操作,并返回新的平方后的数组:

class Math

{

public function square($n)

{

return $n * $n;

}

}

$arr = array(2, 4, 6);

$mathObj = new Math();

$newArr = array_map(array($mathObj, 'square'), $arr);

print_r($newArr);

输出结果为:

Array

(

[0] => 4

[1] => 16

[2] => 36

)

在上面的例子中,首先定义了一个Math类,并在其中定义了square()方法,用于计算输入参数的平方。然后创建一个$mathObj对象,并将该对象的square()方法作为回调函数传递给array_map()函数,对数组中的每个元素执行平方操作,将结果存储在新数组$newArr中。

3.2 对象的静态方法作为回调函数

除了支持对象的实例方法作为回调函数之外,array_map()函数还支持对象的静态方法作为回调函数进行传递。下面的例子展示了如何使用对象的静态方法对字符串数组中的字符串进行大写转换,并返回新的转换后的数组:

class StringHandler

{

public static function toUpper($str)

{

return strtoupper($str);

}

}

$arr = array('hello', 'world', 'php');

$newArr = array_map(array('StringHandler', 'toUpper'), $arr);

print_r($newArr);

输出结果为:

Array

(

[0] => HELLO

[1] => WORLD

[2] => PHP

)

在上面的例子中,首先定义了一个StringHandler类,并在其中定义了toUpper()静态方法,用于将输入字符串转换为大写字母。然后将该类的名称和toUpper()方法作为回调函数传递给array_map()函数,对数组中的每个字符串元素执行大写转换操作,将结果存储在新数组$newArr中。

3.3 多维数组的处理

array_map()函数并不仅限于一维数组的操作,它也支持多维数组的处理。下面的例子展示了如何使用array_map()函数对两个多维数组中的对应元素执行加法操作,并返回对应结果的多维数组:

$multiArr1 = array(

array(1, 2, 3),

array(4, 5, 6),

array(7, 8, 9)

);

$multiArr2 = array(

array(11, 12, 13),

array(14, 15, 16),

array(17, 18, 19)

);

function add($x, $y)

{

return $x + $y;

}

$newArr = array_map(function($arr1, $arr2) use ($add){

return array_map($add, $arr1, $arr2);

}, $multiArr1, $multiArr2);

print_r($newArr);

输出结果为:

Array

(

[0] => Array

(

[0] => 12

[1] => 14

[2] => 16

)

[1] => Array

(

[0] => 18

[1] => 20

[2] => 22

)

[2] => Array

(

[0] => 24

[1] => 26

[2] => 28

)

)

在上面的例子中,首先定义了两个多维数组$multiArr1$multiArr2,它们分别包含了多个子数组。然后定义了一个add()函数,用于将接收到的两个数值相加并返回。最后使用一个匿名函数将add()函数和两个多维数组$multiArr1$multiArr2作为参数传递给array_map()函数,并对两个多维数组中的对应元素执行加法操作,将结果存储在新多维数组$newArr中。

4. 总结

array_map()函数是PHP中非常有用的函数,可以对数组中的每个元素执行指定的函数,并返回新的数组。无论是对一维数组还是多维数组,array_map()函数都能够完成相应的操作。此外,该函数还支持将对象的方法和静态方法作为回调函数进行传递,具有很高的灵活性和可扩展性。

后端开发标签