php数组函数有几个,六个比较好用的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

20 $last_names = array_column($a, 'last_name', 'id');21 print_r($last_names);

输出结果:

Array

(

[5698] => Griffin

[4767] => Smith

[3809] => Doe

)

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

1 function test_odd($var)2 {3 return($var & 1);4 }5

6 $a1=array("a","b",2,3,4);7 print_r(array_filter($a1,"test_odd"));

输出:

Array

(

[2] => 2

[3] => 3

[4] => 4

)

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

8 $a = array(1, 2, 3, 4, 5, 6 => [2, 3]);9 print_r(array_map("myfunction", $a));

输出:

Array

(

[0] => 1

[1] => 4

[2] => 9

[3] => 16

[4] => 25

[6] => Array

(

[0] => 4

[1] => 9

)

)

1 function myfunction($v1, $v2) {2 if ($v1 === $v2) {3 return "same";4 }5 return "different";6 }7

8 $a1 = array("Horse", "Dog", "Cat");9 $a2 = array("Cow", "Dog", "Rat");10 print_r(array_map("myfunction", $a1, $a2));

输出:

Array

(

[0] => different

[1] => same

[2] => different

)

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

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

1 function myfunction(&$value, $key, $p) {2 if ($value == 'xxx') {3 $value = $p;4 }5 }6

7 $a = array("a" => "red", "b" => "green", "c" => "blue", 'd' => ['x' => 'xxx', 'y' => 'yyy']);8 array_walk_recursive($a, "myfunction", 'green');9 print_r($a);

输出:

Array

(

[a] => red

[b] => green

[c] => blue

[d] => Array

(

[x] => green

[y] => yyy

)

)

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";

输出:

$a = Cat; $b = Dog; $c = Horse

1 $firstname = "Peter";2 $lastname = "Griffin";3 $age = "41";4

5 $result = compact("firstname", "lastname", "age");6

7 print_r($result);

输出:

Array

(

[firstname] => Peter

[lastname] => Griffin

[age] => 41

)

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

类似功能实现: 冒泡排序

$arr2 =[

['id' => 3,

'age' => 33,],['id' => 2,

'age' => 44,],['id' => 1,

'age' => 22,],['id' => 11,

'age' => 22,],];//按age字段升序排序

$field = 'age';uasort($arr2, function($a, $b) use ($field) {if ($a[$field] == $b[$field]){return 0;

}return ($a[$field] < $b[$field]) ? -1 : 1;

});print_r($arr2);

输出结果:

Array(

[2] => Array(

[id]=> 1[age]=> 22)

[3] => Array(

[id]=> 11[age]=> 22)

[0] => Array(

[id]=> 3[age]=> 33)

[1] => Array(

[id]=> 2[age]=> 44)

)

快速排序实现:

1 /**2 * 多维数组快速排序3 * @param type $arr4 * @param type $field5 * @return type6 */

7 function manyArrayQuickSort($arr, $field, $desc=false){8 $length = count($arr);9 if($length <= 1){10 return $arr;11 }12 $baseArr = $arr[0];13 $baseNum = is_string($baseArr[$field]) ? ord($baseArr[$field]) : $baseArr[$field];14 $leftArr = array();15 $rightArr = array();16 for($i=1; $i $temp){26 $leftArr[] = $arr[$i];27 }else{28 $rightArr[] = $arr[$i];29 }30 }31 }32

33 $leftArr = manyArrayQuickSort($leftArr, $field);34 $rightArr = manyArrayQuickSort($rightArr, $field);35

36 return array_merge($leftArr, array($baseArr), $rightArr);37 }38 $res = manyArrayQuickSort($arr2, 'age');39 print_r($res);

输出结果:

Array

(

[0] => Array

(

[id] => 1

[age] => 22

)

[1] => Array

(

[id] => 3

[age] => 33

)

[2] => Array

(

[id] => 2

[age] => 44

)

)

这时候我们会发现两者的不同, 一维数组的key键值

uasort 一维数组的键值不变: 2,3,0,1

manyArrayQuickSort 一维数组的键值重新索引了: 0,1,2,3

内容来源于网络如有侵权请私信删除

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值