常用数组函数-创建-删除-键值操作-回调函数
1. 创建数组
// 1. 创建数组
echo "1. 创建数组<br>";
// 1.1 字面量
$arr = ['a', 1, 2];
// Array ( [0] => a [1] => 1 [2] => 2 )
echo print_r($arr, true), '<br>';
// 1.2 索引创建
$arr[3] = 'b';
// Array ( [0] => a [1] => 1 [2] => 2 [3] => b )
echo print_r($arr, true), '<br>';
// 1.2 函数创建
$arr = array(1, 2, 3);
// Array ( [0] => 1 [1] => 2 [2] => 3 )
echo print_r($arr, true), '<br>';
// 1.3 填充创建
$arr = range('a', 'f', 2);
// Array ( [0] => a [1] => c [2] => e )
echo print_r($arr, true), '<br>';
// 1.4 位置添加
// 1.4.1 头部添加
$n = array_unshift($arr, 1, 2);
// $n = 5; Array ( [0] => 1 [1] => 2 [2] => a [3] => c [4] => e )
echo "\$n = $n; ", print_r($arr, true), '<br>';
// 1.4.2 尾部添加
$n = array_push($arr, 'g', 'h');
// $n = 7; Array ( [0] => 1 [1] => 2 [2] => a [3] => c [4] => e [5] => g [6] => h )
echo "\$n = $n; ", print_r($arr, true), '<br>';
echo '<hr>';
2. 删除数组
// 2. 删除数组
echo "2. 删除数组<br>";
// 2.1 头部删除
$a = array_shift($arr);
$b = array_shift($arr);
// $a = 1, $b = 2; Array ( [0] => a [1] => c [2] => e [3] => g [4] => h )
echo "\$a = $a, \$b = $b; ", print_r($arr, true), '<br>';
// 2.2 尾部删除
$a = array_pop($arr);
$b = array_pop($arr);
// $a = h, $b = g; Array ( [0] => a [1] => c [2] => e )
echo "\$a = $a, \$b = $b; ", print_r($arr, true), '<br>';
// 2.3.1 位置删除
// 第1位置删2个
$arr1 = array_splice($arr, 1, 2);
// Array ( [0] => c [1] => e ) ; Array ( [0] => a )
echo print_r($arr1, true), '; ', print_r($arr, true), '<br>';
// 2.3.2 位置插入
// 位置1插入数组
$arr2 = array_splice($arr, 1, 0, ['c', 'b']);
// Array ( ) ; Array ( [0] => a [1] => c [2] => b )
echo print_r($arr2, true), '; ', print_r($arr, true), '<br>';
// 2.3.3 更新数组
// 位置1开始两个元素,更新数组 ['b', 'c'] 含两个元素
$arr3 = array_splice($arr, 1, 2, ['b', 'c']);
// Array ( [0] => c [1] => b ) ; Array ( [0] => a [1] => b [2] => c )
echo print_r($arr3, true), '; ', print_r($arr, true), '<br>';
echo '<hr>';
3. 数组指针
// 3. 数组指针
echo "3. 数组指针<br>";
// 0 => a
echo key($arr) .' => '. current($arr) .'<br>';
// 后一个
next($arr);
next($arr);
// 2 => c
echo key($arr) .' => '. current($arr) .'<br>';
// 前一个
prev($arr);
// 1 => b
echo key($arr) .' => '. current($arr) .'<br>';
// 第一个
reset($arr);
// 0 => a
echo key($arr) .' => '. current($arr) .'<br>';
// 最后一个
end($arr);
// 2 => c
echo key($arr) .' => '. current($arr) .'<br>';
echo '<hr>';
4. 键值操作
// 4. 键值操作
echo "4. 键值操作<br>";
// 取键数组
$keys = array_keys($arr);
// Array ( [0] => 0 [1] => 1 [2] => 2 )
echo print_r($keys, true), '<br>';
// 取值数组
$values = array_values($arr);
// Array ( [0] => a [1] => b [2] => c )
echo print_r($values, true), '<br>';
// 判断键存在
// key = 2, exist : true
echo 'key = 2, exist : ', var_export(array_key_exists(2, $arr), true), '<br>';
// 判断值存在
// value = 'b', exist : true
echo 'value = \'b\', exist : ', var_export(in_array('b', $arr), true), '<br>';
// 数组搜索
$pos1 = array_search('b', $arr);
$pos2 = array_search('z', $arr);
// 'b' index : 1
echo "'b' index : ", var_export($pos1, true) .'<br>';
// 'z' index : false
echo "'z' index : ", var_export($pos2, true) .'<br>';
echo '<hr>';
5. 数组回调
// 5. 数组回调
echo "5. 数组回调<br>";
// 5.1 数组漫步
$bool = array_walk($arr, function(&$value, $key, $userdata){
if ($key === 0) $value = $userdata[0] .'-'. $value;
if ($value === 'b') $value = $userdata[1];
if ($value === 'c') $value .= '-'. $userdata[2];
}, ['prefix', '', 'suffix']);
// $bool = true; Array ( [0] => prefix-a [1] => [2] => c-suffix )
echo '$bool = ', var_export($bool, true), '; ', print_r($arr, true), '<br>';
// 5.2 数组过滤
// 5.2.1 过滤空值
$arr = array_filter($arr);
// Array ( [0] => prefix-a [2] => c-suffix )
echo print_r($arr, true), '<br>';
// 5.2.2 条件过滤
// 过滤值中包含字符串 fix 的元素组成的数组
$arr = array_filter($arr, function($value){
return false !== stripos($value, 'fix');
});
// Array ( [0] => prefix-a [2] => c-suffix )
echo print_r($arr, true), '<br>';
// 5.3 数组遍历
// 5.3.1 批量导入
$map_arr1 = array_map(function($file){
// 批量导入
//require $file;
// 返回文件名
return basename($file);
}, glob(__DIR__ .'/012*.php'));
// 当前目录下 012开头且 .php 结尾的文件名
// Array ( [0] => 0125.php [1] => 0126.php [2] => 0127.php [3] => 0128.php [4] => 0129.php )
echo print_r($map_arr1, true), '<br>';
// 5.3.2 批量计算
$arr1 = [1, 2, 3];
$arr2 = [3, 2, 1];
$map_arr2 = array_map(function($a, $b){
return $a * $b;
}, $arr1, $arr2);
// 两个数组,各自项目乘积组成的数组
// Array ( [0] => 3 [1] => 4 [2] => 3 )
echo print_r($map_arr2, true), '<br>';
// 5.4 数组归并
// 5.4.1 数组求和
$arr_reduce1 = array_reduce($map_arr2, function($prev, $next){
return $prev + $next;
});
echo "array_sum : $arr_reduce1<br>";
// 5.4.2 多数组分列求和
$arr_reduce2 = array_reduce([$arr1, $arr2], function($prev, $next){
return array_map(function($a, $b){
return $a + $b;
}, $prev, $next);
}, [0, 0, 0]);
// Array ( [0] => 4 [1] => 4 [2] => 4 )
echo print_r($arr_reduce2, true);