六个比较好用的php数组Array函数
程序员文章站
2022-07-07 23:17:26
1. array_column 返回输入数组中某个单一列的值。2. array_filter 用回调函数过滤数组中的元素。3. array_map 将用户自定义函数作用到给定数组的每个值上,返回新的值。4. array_walk_recursive 对数组中的每个成员递归地应用用户函数。5. ext ......
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 使用用户自定义的比较函数对数组中的键值进行排序(可以对二维数组排序)。
类似功能实现: 冒泡排序
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);
输出:
Array ( [2] => Array ( [id] => 1 [age] => 22 ) [0] => Array ( [id] => 3 [age] => 33 ) [1] => Array ( [id] => 2 [age] => 44 ) )
冒泡排序实现:
1 /** 2 * 多维数组快速排序 3 * @param type $arr 4 * @param type $field 5 * @return type 6 */ 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<$length; $i++){ 17 $temp = is_string($arr[$i][$field]) ? ord($arr[$i][$field]) : $arr[$i][$field]; 18 if($desc){ 19 if($baseNum < $temp){ 20 $leftArr[] = $arr[$i]; 21 }else{ 22 $rightArr[] = $arr[$i]; 23 } 24 }else{ 25 if($baseNum > $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,0,1
manyArrayQuickSort 一维数组的键值重新索引了: 0,1,2
上一篇: Mac怎么将Time Machine备份的系统恢复到新的硬盘?
下一篇: mysql新手进阶02
推荐阅读
-
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
-
php数组函数序列之array_pop() - 删除数组中的最后一个元素
-
php通过array_merge()函数合并两个数组的方法
-
php通过array_merge()函数合并关联和非关联数组的方法
-
php通过array_push()函数添加多个变量到数组末尾的方法
-
比较好用的PHP防注入漏洞过滤函数代码
-
解析PHP函数array_flip()在重复数组元素删除中的作用
-
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
-
PHP代码篇(二)-- array_column函数将二维数组格式化成固定格式的一维数组,及优化查询方法
-
php数组函数序列之array_unique() - 去除数组中重复的元素值