[关闭]
@Chiang 2020-01-17T14:17:20.000000Z 字数 2278 阅读 503

array_map

PHP-Array


array_map — 为数组的每个元素应用回调函数

说明

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

array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样

参数

  • callback
    回调函数,应用到每个数组里的每个元素。
  • array1
    数组,遍历运行 callback 函数。
  • ...
    数组列表,每个都遍历运行 callback 函数。

返回值

返回数组,包含 callback 函数处理之后 array1 的所有元素

范例

  1. <?php
  2. function cube($n)
  3. {
  4. return($n * $n * $n);
  5. }
  6. $a = array(1, 2, 3, 4, 5);
  7. $b = array_map("cube", $a);
  8. print_r($b);
  9. ?>
  10. 这使得 $b 成为:
  11. Array
  12. (
  13. [0] => 1
  14. [1] => 8
  15. [2] => 27
  16. [3] => 64
  17. [4] => 125
  18. )
  1. <?php
  2. $func = function($value) {
  3. return $value * 2;
  4. };
  5. print_r(array_map($func, range(1, 5)));
  6. ?>
  7. Array
  8. (
  9. [0] => 2
  10. [1] => 4
  11. [2] => 6
  12. [3] => 8
  13. [4] => 10
  14. )
  1. <?php
  2. function show_Spanish($n, $m)
  3. {
  4. return("The number $n is called $m in Spanish");
  5. }
  6. function map_Spanish($n, $m)
  7. {
  8. return(array($n => $m));
  9. }
  10. $a = array(1, 2, 3, 4, 5);
  11. $b = array("uno", "dos", "tres", "cuatro", "cinco");
  12. $c = array_map("show_Spanish", $a, $b);
  13. print_r($c);
  14. $d = array_map("map_Spanish", $a , $b);
  15. print_r($d);
  16. ?>
  17. 以上例程会输出:
  18. // printout of $c
  19. Array
  20. (
  21. [0] => The number 1 is called uno in Spanish
  22. [1] => The number 2 is called dos in Spanish
  23. [2] => The number 3 is called tres in Spanish
  24. [3] => The number 4 is called cuatro in Spanish
  25. [4] => The number 5 is called cinco in Spanish
  26. )
  27. // printout of $d
  28. Array
  29. (
  30. [0] => Array
  31. (
  32. [1] => uno
  33. )
  34. [1] => Array
  35. (
  36. [2] => dos
  37. )
  38. [2] => Array
  39. (
  40. [3] => tres
  41. )
  42. [3] => Array
  43. (
  44. [4] => cuatro
  45. )
  46. [4] => Array
  47. (
  48. [5] => cinco
  49. )
  50. )
  • 传入两个及以上的数组时,它们元素数量将会相同。因为回调函数会并行地处理相互对应的元素。 如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。
  • 此函数有个有趣的用法:传入 NULL 作为回调函数的名称,将创建多维数组(一个数组,内部包含数组。)
  1. <?php
  2. $a = array(1, 2, 3, 4, 5);
  3. $b = array("one", "two", "three", "four", "five");
  4. $c = array("uno", "dos", "tres", "cuatro", "cinco");
  5. $d = array_map(null, $a, $b, $c);
  6. print_r($d);
  7. ?>
  8. 以上例程会输出:
  9. Array
  10. (
  11. [0] => Array
  12. (
  13. [0] => 1
  14. [1] => one
  15. [2] => uno
  16. )
  17. [1] => Array
  18. (
  19. [0] => 2
  20. [1] => two
  21. [2] => dos
  22. )
  23. [2] => Array
  24. (
  25. [0] => 3
  26. [1] => three
  27. [2] => tres
  28. )
  29. [3] => Array
  30. (
  31. [0] => 4
  32. [1] => four
  33. [2] => cuatro
  34. )
  35. [4] => Array
  36. (
  37. [0] => 5
  38. [1] => five
  39. [2] => cinco
  40. )
  41. )

如果仅传入一个数组,键(key)会保留;传入多个数组,键(key)是整型数字的序列。

array_map() 键(key)是 string

  1. <?php
  2. $arr = array("stringkey" => "value");
  3. function cb1($a) {
  4. return array ($a);
  5. }
  6. function cb2($a, $b) {
  7. return array ($a, $b);
  8. }
  9. var_dump(array_map("cb1", $arr));
  10. var_dump(array_map("cb2", $arr, $arr));
  11. var_dump(array_map(null, $arr));
  12. var_dump(array_map(null, $arr, $arr));
  13. ?>
  14. 以上例程会输出:
  15. array(1) {
  16. ["stringkey"]=>
  17. array(1) {
  18. [0]=>
  19. string(5) "value"
  20. }
  21. }
  22. array(1) {
  23. [0]=>
  24. array(2) {
  25. [0]=>
  26. string(5) "value"
  27. [1]=>
  28. string(5) "value"
  29. }
  30. }
  31. array(1) {
  32. ["stringkey"]=>
  33. string(5) "value"
  34. }
  35. array(1) {
  36. [0]=>
  37. array(2) {
  38. [0]=>
  39. string(5) "value"
  40. [1]=>
  41. string(5) "value"
  42. }
  43. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注