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
内容来源于网络如有侵权请私信删除