分享六个比较好用的php数组Array函数

这篇文章给大家分享六个比较好用的php数组Array函数,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧。

1. array_column 返回输入数组中某个单一列的值。

2. array_filter 用回调函数过滤数组中的元素。

3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值。

4. array_walk_recursive 对数组中的每个成员递归地应用用户函数。

5. extract (从数组中将变量导入到当前的符号表), compact (创建一个包含变量名和它们的值的数组)

6. uasort 使用用户自定义的比较函数对数组中的键值进行排序。

1. array_column 返回输入数组中某个单一列的值。

类似功能有

1.1 Yii2 中的 ArrayHelper::index($array, 'id');

1.2 Yii2 中的 $query->select(['last_name', 'id'])->indexBy('id')->column();

  1. // 可能从数据库中返回数组
  2. $a = array(
  3. array(
  4. 'id' => 5698,
  5. 'first_name' => 'Peter',
  6. 'last_name' => 'Griffin',
  7. ),
  8. array(
  9. 'id' => 4767,
  10. 'first_name' => 'Ben',
  11. 'last_name' => 'Smith',
  12. ),
  13. array(
  14. 'id' => 3809,
  15. 'first_name' => 'Joe',
  16. 'last_name' => 'Doe',
  17. )
  18. );
  19. $last_names = array_column($a, 'last_name', 'id');
  20. print_r($last_names);

输出结果:

  1. Array
  2. (
  3. [5698] => Griffin
  4. [4767] => Smith
  5. [3809] => Doe
  6. )

2. array_filter 用回调函数过滤数组中的元素。

  1. function test_odd($var)
  2. {
  3. return($var & 1);
  4. }
  5. $a1=array("a","b",2,3,4);
  6. print_r(array_filter($a1,"test_odd"));

输出:

  1. Array
  2. (
  3. [2] => 2
  4. [3] => 3
  5. [4] => 4
  6. )

3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值。

此函数有点类似与 array_walk_recursive , 只是多写了一步递归

  1. function myfunction($v) {
  2. if (is_array($v)) {
  3. return array_map("myfunction", $v);
  4. }
  5. return($v * $v);
  6. }
  7. $a = array(1, 2, 3, 4, 5, 6 => [2, 3]);
  8. print_r(array_map("myfunction", $a));

输出:

  1. Array
  2. (
  3. [0] => 1
  4. [1] => 4
  5. [2] => 9
  6. [3] => 16
  7. [4] => 25
  8. [6] => Array
  9. (
  10. [0] => 4
  11. [1] => 9
  12. )
  13. )
  14. function myfunction($v1, $v2) {
  15. if ($v1 === $v2) {
  16. return "same";
  17. }
  18. return "different";
  19. }
  20. $a1 = array("Horse", "Dog", "Cat");
  21. $a2 = array("Cow", "Dog", "Rat");
  22. print_r(array_map("myfunction", $a1, $a2));
  23. 输出:
  24. Array
  25. (
  26. [0] => different
  27. [1] => same
  28. [2] => different

4. array_walk_recursive 对数组中的每个成员递归地应用用户函数。

此函数有点类似与 array_map, 只是省去了写递归

  1. function myfunction(&$value, $key, $p) {
  2. if ($value == 'xxx') {
  3. $value = $p;
  4. }
  5. }
  6. $a = array("a" => "red", "b" => "green", "c" => "blue", 'd' => ['x' => 'xxx', 'y' => 'yyy']);
  7. array_walk_recursive($a, "myfunction", 'green');
  8. print_r($a);

输出:

  1. Array
  2. (
  3. [a] => red
  4. [b] => green
  5. [c] => blue
  6. [d] => Array
  7. (
  8. [x] => green
  9. [y] => yyy
  10. )
  11. )

5. extract (从数组中将变量导入到当前的符号表), compact (创建一个包含变量名和它们的值的数组)

  1. $a = "Original";
  2. $my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
  3. extract($my_array);
  4. echo "\$a = $a; \$b = $b; \$c = $c";

输出:

  1. $a = Cat; $b = Dog; $c = Horse
  2. $firstname = "Peter";
  3. $lastname = "Griffin";
  4. $age = "41";
  5. $result = compact("firstname", "lastname", "age");
  6. print_r($result);

输出:

  1. Array
  2. (
  3. [firstname] => Peter
  4. [lastname] => Griffin
  5. [age] => 41
  6. )

6. uasort 使用用户自定义的比较函数对数组中的键值进行排序(可以对二维数组排序)。

  1. $arr2 = [
  2. [
  3. 'id' => 3,
  4. 'age' => 33,
  5. ],
  6. [
  7. 'id' => 2,
  8. 'age' => 44,
  9. ],
  10. [
  11. 'id' => 1,
  12. 'age' => 22,
  13. ],
  14. ];
  15. //按age字段升序排序
  16. uasort($arr2, function($a, $b) {
  17. $field = 'age';
  18. if ($a[$field] == $b[$field]){
  19. return 0;
  20. }
  21. return ($a[$field] < $b[$field]) ? -1 : 1;
  22. });
  23. print_r($arr2);

输出:

  1. Array
  2. (
  3. [2] => Array
  4. (
  5. [id] => 1
  6. [age] => 22
  7. )
  8. [0] => Array
  9. (
  10. [id] => 3
  11. [age] => 33
  12. )
  13. [1] => Array
  14. (
  15. [id] => 2
  16. [age] => 44
  17. )
  18. )