前面的话

  PHP中的数组功能非常强大,数组处理函数有着强大、灵活、高效的特点。PHP5提供了近100个操作数组的系统函数,包括排序函数、替换函数、数组计算函数等。下面将详细介绍数组函数

  [注意]关于javascript数组的22种方法移步至此

键值操作

  数组的每个元素都是由键值对组成,通过元素的键名来访问对应的键值。关于键值操作有array_values()、array_keys()、in_array()、array_flip()和array_reverse()这5个常用函数

array_values

  array_values() 返回 input 数组中所有的值并给其建立数字索引

  1. array array_values ( array $input )
  1. <?php
  2. $array = array("size" => "XL", "color" => "gold");
  3. //Array ( [0] => XL [1] => gold )
  4. print_r(array_values($array));
  5. ?>

array_keys

  array_keys() 返回 input 数组中的数字或者字符串的键名

  1. array array_keys ( array $array [, mixed $search_value [, bool $strict = false ]] )

  如果指定了可选参数 search_value,则只返回该值的键名。否则 input 数组中的所有键名都会被返回

  如果指定了可选参数 strict,表示判断在搜索的时候是否该使用严格的比较(===)

  1. <?php
  2. $array = array(0 => 100, "color" => "red");
  3. //Array ( [0] => 0 [1] => color )
  4. print_r(array_keys($array));
  5.  
  6. $array = array("blue", "red", "green", "blue", "blue");
  7. // Array ( [0] => 0 [1] => 3 [2] => 4 )
  8. print_r(array_keys($array, "blue"));
  9.  
  10. $array = array("color" => array("blue", "red", "green"),
  11. "size" => array("small", "medium", "large"));
  12. Array ( [0] => color [1] => size )
  13. print_r(array_keys($array));
  14. ?>

in_array

  in_array — 检查数组中是否存在某个值

  1. bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

  如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同

  1. <?php
  2. $os = array("Mac", "NT", "Irix", "Linux");
  3. if (in_array("Irix", $os)) {
  4. //Got Irix
  5. echo "Got Irix";
  6. }
  7. if (in_array("mac", $os)) {
  8. echo "Got mac";
  9. }
  10. ?>

array_flip

  array_flip — 交换数组中的键和值,成功时返回交换后的数组,如果失败返回 NULL

  1. array array_flip ( array $trans )

  array_flip() 返回一个反转后的 array,例如 trans 中的键名变成了值,而 trans 中的值成了键名

  如果同一个值出现了多次,则最后一个键名将作为它的值,所有其它的都丢失了

  [注意]trans中的值需要能够作为合法的键名,例如需要是 integer 或者 string。如果值的类型不对将发出一个警告,并且有问题的键/值对将不会反转

  1. <?php
  2. $trans = array("a" => 1, "b" => 1, "c" => 2);
  3. $trans = array_flip($trans);
  4. //Array ( [1] => b [2] => c )
  5. print_r($trans);
  6. ?>

array_reverse

  array_reverse — 返回一个单元顺序相反的数组

  1. array array_reverse ( array $array [, bool $preserve_keys = false ] )

  如果参数preserve_keys设置为 TRUE 会保留数字的键。非数字的键则不受这个设置的影响,总是会被保留

  1. <?php
  2. $input = array("php", 4.0, array("green", "red"));
  3. $result = array_reverse($input);
  4. /*
  5. array (size=3)
  6. 0 =>
  7. array (size=2)
  8. 0 => string 'green' (length=5)
  9. 1 => string 'red' (length=3)
  10. 1 => float 4
  11. 2 => string 'php' (length=3)
  12. */
  13. var_dump($result);
  14. $result_keyed = array_reverse($input, true);
  15. /*
  16. array (size=3)
  17. 2 =>
  18. array (size=2)
  19. 0 => string 'green' (length=5)
  20. 1 => string 'red' (length=3)
  21. 1 => float 4
  22. 0 => string 'php' (length=3)
  23. */
  24. var_dump($result_keyed);
  25. ?>

记数

count

  count — 计算数组中的单元数目或对象中的属性个数

  1. int count ( mixed $var [, int $mode = COUNT_NORMAL ] )

  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。mode 的默认值是 0。count() 识别不了无限递归

  1. <?php
  2. $a[0] = 1;
  3. $a[1] = 3;
  4. $a[2] = 5;
  5. $result = count($a);
  6. // $result == 3
  7.  
  8. $b[0] = 7;
  9. $b[5] = 9;
  10. $b[10] = 11;
  11. $result = count($b);
  12. // $result == 3
  13.  
  14. $result = count(null);
  15. // $result == 0
  16.  
  17. $result = count(false);
  18. // $result == 1
  19. ?>
  1. <?php
  2. $food = array('fruits' => array('orange', 'banana', 'apple'),
  3. 'veggie' => array('carrot', 'collard', 'pea'));
  4. echo count($food, COUNT_RECURSIVE); // output 8
  5. echo count($food); // output 2
  6. ?>

array_count_values

  array_count_values — 统计数组中所有的值出现的次数

  1. array array_count_values ( array $input )
  1. <?php
  2. $array = array(1, "hello", 1, "world", "hello");
  3. //Array ( [1] => 2 [hello] => 2 [world] => 1 )
  4. print_r(array_count_values($array));
  5. ?>

array_unique

  array_unique — 移除数组中重复的值

  1. array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )

  [注意]键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留

  1. <?php
  2. $input = array("a" => "green", "red", "b" => "green", "blue", "red");
  3. $result = array_unique($input);
  4. //Array ( [a] => green [0] => red [1] => blue )
  5. print_r($result);
  6. ?>

array_sum

  array_sum — 计算数组中所有值的和

  array_sum() 将数组中的所有值的和以整数或浮点数的结果返回

  1. <?php
  2. $a = array(2, 4, 6, 8);
  3. //sum(a) = 20
  4. echo "sum(a) = " . array_sum($a) . "\n";
  5. $b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
  6. //sum(b) = 6.9
  7. echo "sum(b) = " . array_sum($b) . "\n";
  8. ?>

回调函数

array_filter

  array_filter — 用回调函数过滤数组中的单元

  1. array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

  依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变

  [注意]如果没有提供 callback 函数, 将删除 input 中所有等值为 FALSE 的条目

  1. <?php
  2. $entry = array(0 => 'foo',1 => false,2 => -1,3 => null,4 => '');
  3. //Array ( [0] => foo [2] => -1 )
  4. print_r(array_filter($entry));
  5. ?>
  1. <?php
  2. function odd($var)
  3. {
  4. return($var & 1);
  5. }
  6. function even($var)
  7. {
  8. return(!($var & 1));
  9. }
  10. $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
  11. $array2 = array(6, 7, 8, 9, 10, 11, 12);
  12. //Odd : Array ( [a] => 1 [c] => 3 [e] => 5 )
  13. echo "Odd :\n";
  14. print_r(array_filter($array1, "odd"));
  15. //Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )
  16. echo "Even:\n";
  17. print_r(array_filter($array2, "even"));
  18. ?>

array_walk

  array_walk — 使用用户自定义函数对数组中的每个元素做回调处理

  1. bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )

  将用户自定义函数 funcname 应用到 array 数组中的每个单元。array_walk() 不会受到 array 内部数组指针的影响。array_walk() 会遍历整个数组而不管指针的位置

  典型情况下 callback 接受两个参数。array 参数的值作为第一个,键名作为第二个

  如果提供了可选参数 userdata,将被作为第三个参数传递给 callback funcname

  1. <?php
  2. $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
  3. function test_alter(&$item1, $key, $prefix)
  4. {
  5. $item1 = "$prefix: $item1";
  6. }
  7. function test_print($item2, $key)
  8. {
  9. echo "$key. $item2\n";
  10. }
  11. //Before ...: d. lemon a. orange b. banana c. apple
  12. echo "Before ...:\n";
  13. array_walk($fruits, 'test_print');
  14.  
  15. array_walk($fruits, 'test_alter', 'fruit');
  16. echo "... and after:\n";
  17. //... and after: d. fruit: lemon a. fruit: orange b. fruit: banana c. fruit: apple
  18. array_walk($fruits, 'test_print');
  19. ?>

array_map

  array_map — 将回调函数作用到给定数组的单元上

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

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

  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. //Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
  9. print_r($b);
  10. ?>

组合

array_slice

  array_slice — 从数组中取出一段

  1. array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )

  array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列

  [注意]array_slice()默认会重新排序并重置数组的数字索引。可以通过将 preserve_keys 设为 TRUE 来改变此行为

  1. <?php
  2. $input = array("a", "b", "c", "d", "e");
  3. // returns "c", "d", and "e"
  4. $output = array_slice($input, 2);
  5.  
  6. // returns "d"
  7. $output = array_slice($input, -2, 1);
  8.  
  9. // returns "a", "b", and "c"
  10. $output = array_slice($input, 0, 3);
  11.  
  12. //Array ( [0] => c [1] => d )
  13. print_r(array_slice($input, 2, -1));
  14.  
  15. //Array ( [2] => c [3] => d )
  16. print_r(array_slice($input, 2, -1, true));
  17. ?>

array_splice

  array_splice — 把数组中的一部分去掉并用其它值取代,返回一个包含有被移除单元的数组,而原数组为变化后的数组

  1. array array_splice ( array &$input , int $offset [, int $length = 0 [, mixed $replacement ]] )

  把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用其中的单元取代

  [注意]input 中的数字键名不被保留

  1. <?php
  2. $input = array("red", "green", "blue", "yellow");
  3. print_r(array_splice($input, 2));//Array ( [0] => blue [1] => yellow )
  4. print_r($input);//Array ( [0] => red [1] => green )
  5.  
  6. $input = array("red", "green", "blue", "yellow");
  7. print_r(array_splice($input, -1, 1, array("black", "maroon")));// Array ( [0] => yellow )
  8. print_r($input);//Array ( [0] => red [1] => green [2] => blue [3] => black [4] => maroon )
  9. ?>

array_combine

  array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值

  1. array array_combine ( array $keys , array $values )

  [注意]如果作为keys的数组和作为values的数组的元素个数不一样,将会抛出一个警告错误

  1. <?php
  2. $a = array('green', 'red', 'yellow');
  3. $b = array('avocado', 'apple', 'banana');
  4. $c = array_combine($a, $b);
  5. //Array ( [green] => avocado [red] => apple [yellow] => banana )
  6. print_r($c);
  7. ?>

array_merge

  array_merge — 合并一个或多个数组

  1. array array_merge ( array $array1 [, array $... ] )

  array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组

  如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面

  如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引

  1. <?php
  2. $array1 = array("color" => "red", 2, 4);
  3. $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
  4. $result = array_merge($array1, $array2);
  5. //Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )
  6. print_r($result);
  7. ?>

【+】

  如果想完全保留原有数组并只想新的数组附加到后面,用 + 运算符

  [注意]如果输入的数组中有相同的字符串键名,则该键名前面的值将覆盖后面的值

  1. <?php
  2. $array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
  3. $array2 = array(1 => 'one_a', 2 => 'three_a', 3 => 'four_a');
  4. $result = $array1 + $array2;
  5. //Array ( [0] => zero_a [2] => two_a [3] => three_a [1] => one_a )
  6. print_r($result);
  7. ?>

array_intersect

  array_intersect — 计算数组的交集

  1. array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

  array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值

  [注意]键名保留不变

  1. <?php
  2. $array1 = array("a" => "green", "red", "blue");
  3. $array2 = array("b" => "green", "yellow", "red");
  4. $result = array_intersect($array1, $array2);
  5. //Array ( [a] => green [0] => red )
  6. print_r($result);
  7. ?>

array_diff

  array_diff — 计算数组的差集

  1. array array_diff ( array $array1 , array $array2 [, array $... ] )

  对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值

  1. <?php
  2. $array1 = array("a" => "green", "red", "blue", "red");
  3. $array2 = array("b" => "green", "yellow", "red");
  4. $result = array_diff($array1, $array2);
  5. //Array ( [1] => blue )
  6. print_r($result);
  7. ?>

array_fill

  array_fill — 用给定的值填充数组,返回填充后的数组

  1. array array_fill ( int $start_index , int $num , mixed $value )

  array_fill() 用 value 参数的值将一个数组填充 num 个条目,键名由 start_index 参数指定的开始

  1. ?php
  2. $a = array_fill(5, 6, 'banana');
  3. $b = array_fill(-2, 4, 'pear');
  4. //Array ( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana )
  5. print_r($a);
  6. //Array ( [-2] => pear [0] => pear [1] => pear [2] => pear )
  7. print_r($b);
  8. ?>

range

  range — 建立一个包含指定范围单元的数组,返回的数组中从 start 到 limit 的单元,包括它们本身

  1. array range ( mixed $start , mixed $limit [, number $step = 1 ] )

  如果给出了 step 的值,它将被作为单元之间的步进值。step 应该为正值。如果未指定,step 则默认为 1

  1. <?php
  2. // array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
  3. foreach (range(0, 12) as $number) {
  4. echo $number;
  5. }
  6.  
  7. // array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
  8. foreach (range(0, 100, 10) as $number) {
  9. echo $number;
  10. }
  11.  
  12. // array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i');
  13. foreach (range('a', 'i') as $letter) {
  14. echo $letter;
  15. }
  16. // array('c', 'b', 'a');
  17. foreach (range('c', 'a') as $letter) {
  18. echo $letter;
  19. }
  20. ?>

栈和队列

array_pop

  array_pop — 将数组最后一个单元弹出(出栈)

  1. mixed array_pop ( array &$array )

  array_pop() 弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。如果 array 为空(或者不是数组)将返回 NULL

  1. <?php
  2. $stack = array("orange", "banana", "apple", "raspberry");
  3. $fruit = array_pop($stack);
  4. //Array ( [0] => orange [1] => banana [2] => apple )
  5. print_r($stack);
  6. ?>

array_push

  array_push — 将一个或多个单元压入数组的末尾(入栈),返回处理之后数组的元素个数

  1. int array_push ( array &$array , mixed $var [, mixed $... ] )

  array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加

  1. <?php
  2. $stack = array("orange", "banana");
  3. array_push($stack, "apple", "raspberry");
  4. //Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )
  5. print_r($stack);
  6. ?>

array_shift

  array_shift — 将数组开头的单元移出数组

  1. mixed array_shift ( array &$array )

  array_shift() 将 array 的第一个单元移出并作为结果返回,将 array 的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变

  1. <?php
  2. $stack = array("orange", "banana", "apple", "raspberry");
  3. $fruit = array_shift($stack);
  4. //Array ( [0] => banana [1] => apple [2] => raspberry )
  5. print_r($stack);
  6. ?>

array_unshift

  array_unshift — 在数组开头插入一个或多个单元,返回 array 数组新的单元数目

  1. int array_unshift ( array &$array , mixed $var [, mixed $... ] )

  array_unshift() 将传入的单元插入到 array 数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变

  1. <?php
  2. $queue = array("orange", "banana");
  3. array_unshift($queue, "apple", "raspberry");
  4. //Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana )
  5. print_r($queue);
  6. ?>

顺序

array_rand

  array_rand — 从数组中随机取出一个或多个单元,并返回随机条目的一个或多个键

  1. mixed array_rand ( array $input [, int $num_req = 1 ] )

  [注意]如果只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组

  1. <?php
  2. $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
  3. $rand_keys = array_rand($input, 2);
  4. //Neo
  5. echo $input[$rand_keys[0]] . "\n";
  6. //Cypher
  7. echo $input[$rand_keys[1]] . "\n";
  8. ?>

shuffle

  shuffle — 将数组打乱,成功时返回 TRUE, 或者在失败时返回 FALSE

  1. bool shuffle ( array &$array )
  1. <?php
  2. $numbers = range(1, 20);
  3. shuffle($numbers);
  4. //20 11 19 4 7 13 16 8 12 1 9 6 15 3 2 18 10 14 17 5
  5. foreach ($numbers as $number) {
  6. echo "$number ";
  7. }
  8. ?>

前端学PHP之数组函数的更多相关文章

  1. 前端学PHP之字符串函数

    × 目录 [1]特点 [2]输出 [3]空格[4]大小写[5]HTML[6]格式化[7]比较 前面的话 字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的.信息的分类.解析.存储 ...

  2. 前端学PHP之正则表达式函数

    前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正 ...

  3. 从零开始学安全(十九)●PHP数组函数

    $temp= array(1,2,3,,,,) 创建一个数组赋值给temp $id=range(1,6,2);     成长值   1到6  跨度为2  就是3个长度数组 也可以是字符“a” &quo ...

  4. 前端入门12-JavaScript语法之函数

    声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...

  5. 我们一起来学Shell - shell的函数

    文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...

  6. PHP数组函数: array_walk()与 array_map() 的区别

    详细的介绍如下: PHP数组函数: array_walk() PHP数组函数: array_map() 实际应用中的一点区别与总结: array_walk() 主要用于对某个数组的迭代,相当于 for ...

  7. php常用数组函数回顾一

    数组对于程序开发来说是一个必不可少的工具,我根据网上的常用数组函数,结合个人的使用情况,进行数组系列的总结复习.里面当然不只是数组的基本用法,还有相似函数的不同用法的简单实例,力求用最简单的实例,记住 ...

  8. javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数

    javascript函数一共可分为五类:    ·常规函数    ·数组函数    ·日期函数    ·数学函数    ·字符串函数    1.常规函数    javascript常规函数包括以下9个 ...

  9. PHP 数组函数整理

    如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作. 经常,开发人员发现在PHP中使用这种数据结构 ...

随机推荐

  1. Notepad++ 默认快捷键

    Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数):     1 ...

  2. css实现一行文字居中,多行文字居左

    第一种方法: <style> *{margin:0;padding:0;} .box{width:500px;height:300px;border:1px solid #000;text ...

  3. Python之路【第五篇】python基础 之初识函数(一)和文件管理

    转载请注明出处http://www.cnblogs.com/wupeiqi/articles/5453708.html 函数 一.背景                                 ...

  4. android ADT 无法查看第三方jar源代码

    Source not foundThe JAR of this class file belongs to container 'Android Private Libraries' which do ...

  5. [LeetCode]444. Sequence Reconstruction

    Check whether the original sequence org can be uniquely reconstructed from the sequences in seqs. Th ...

  6. POOL_TYPE enumeration

    typedef enum _POOL_TYPE { NonPagedPool, NonPagedPoolExecute                   = NonPagedPool, PagedP ...

  7. gdb调试工具vi编译器命令参考网址

    vi编译器命令:参考http://www.cnblogs.com/junw_china/articles/1708967.html gbd调试命令:参考http://blog.chinaunix.ne ...

  8. Jexus 支持PHP的三种方式

    Jexus不仅支持ASP.NET,而且能够通个自带的PHP-FCGI服务以及PHP-FPM等方式灵活支持PHP而且还可以以.NET(Phalanger)方式支持PHP. PHP-FCGI服务支持PHP ...

  9. 送干货,实用内联gulp插件——gulp-embed

    现在npm上有很多gulp内联工具,用于把脚本和样式内嵌到HTML页面上,之前搞项目我也在这些插件中寻觅许久,但均不满足公司项目的一个需求—— HTML上同时插入了开发(dev版,src文件夹下,比如 ...

  10. Kosaraju 算法查找强连通分支

    有向图 G = (V, E) 的一个强连通分支(SCC:Strongly Connected Components)是一个最大的顶点集合 C,C 是 V 的子集,对于 C 中的每一对顶点 u 和 v, ...