php 数组函数学习

1、array_change_key_case

array_change_key_case(array,case)函数将数组的所有的键都转换为大写字母或小写字母。array表示目标数组,case表示转成大写还是小写函数,CASE_LOWER默认表示转成小写也可以用0代替,CASE_UPPER表示转换成大写也可以用1代替

<?php
header('Content-type:text/html;charset=utf8');
$arr = ['first' => 'this is first', 'SECOND' => 'this is second', 'thIRD' => 'this is third'];
var_dump(array_change_key_case($arr, 0));
//输出 array(3) { ["first"]=> string(13) "this is first" ["second"]=> string(14) "this is second" ["third"]=> string(13) "this is third" }
?>

 2、array_chunk

array_chunk(array,length,preserve_key)表示按照长度对数组进行折分,array表示目录数组,length表示数组拆分的长度,如果最后一组数组不够拆分,那么就返回余下的项做为一组,preserve_key表示是否指定原数组的键名为该数组的键名,true表示键名和原数组一样,false表示重新以0开头编制新键名(默认)

<?php
header('Content-type:text/html;charset=utf8');
$arr = ['A' => 'first', 'B' => 'second', 'C' => 'third'];
var_dump(array_chunk($arr, 2));
//输出 array(2) {
//  [0]=> array(2) {
//      [0]=> string(5) "first"
//      [1]=> string(6) "second"
//  }
//  [1]=> array(1) {
//      [0]=> string(5) "third"
//  }
// }
?>

 3、array_column

array_column表示返回输入数组中某个单一列的值。(注意:必须是多维数组)

array_column(array,column_key,index_key),array表示目标数组,column_key表示指定返回的列,index_key表示用作返回数组的索引/键的列;

<?php
header('Content-type:text/html;charset=utf8');
// 表示由数据库返回的可能记录集的数组
$a = array(
    array(
        'id' => 5698,
        'first_name' => 'Bill',
        'last_name' => 'Gates',
    ),
    array(
        'id' => 4767,
        'first_name' => 'Steve',
        'last_name' => 'Jobs',
    ),
    array(
        'id' => 3809,
        'first_name' => 'Mark',
        'last_name' => 'Zuckerberg',
    )
);
$last_names = array_column($a, 'last_name', 'id');
print_r($last_names);
/*
 Array
(
    [5698] => Gates
    [4767] => Jobs
    [3809] => Zuckerberg
)
 */
?>

4、array_combine,array_merge,array_merge_recursive

array_combine表示通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值

array_combine(keys,values),keys表示新数组的键名(数组),values表示新数组的数值(数组) 两个数组都不能为空数组,并且长度必需一致,否则返回false;

array_merge(array1,array2,array3...) 函数把一个或多个数组合并为一个数组

array_merge_recursive(array1,array2,array3...)函数把一个或多个数组合并为一个数组

区别在于 array_merge 函数的区别在于处理两个或更多个数组元素有相同的键名时。array_merge_recursive() 不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。例子如下

<?php
header('Content-type:text/html;charset=utf8');
$a = ['A', 'B', 'C'];
$b = ['first', 'second', 'third'];
print_r(array_combine($a, $b));
//输出 Array ( [A] => first [B] => second [C] => third )
print_r(array_merge($a, $b));
//输出 Array ( [0] => A [1] => B [2] => C [3] => first [4] => second [5] => third )
echo '<br>';
$c = ['a' => 'one', 'b' => 'two', 'c' => 'three'];
$d = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
$all = array_merge_recursive($c, $d);
print_r($all);
//输出如下
//Array
//(
//    [a] => Array
//        (
//            [0] => one
//            [1] => first
//        )
//
//    [b] => Array
//        (
//            [0] => two
//            [1] => second
//        )
//
//    [c] => Array
//        (
//            [0] => three
//            [1] => third
//        )
//
//)
print_r(array_merge($c, $d));
//输出如下
//Array
//(
//    [a] => first
//    [b] => second
//    [c] => third
//)
?>

 5、array_count_values,array_values

array_count_values(array)表示对目标数组中出现次数进行统计,返回一个新的数组

array_values(array)函数返回一个包含给定数组中所有键值的数组,但不保留键名(键名是以0开始,并以1递增)

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third', 'd' => 'first', 'e' => 'fourch'];
print_r(array_count_values($a));
//输出 Array ( [first] => 2 [second] => 1 [third] => 1 [fourch] => 1 )
print_r(array_values($a));
//输出 Array ( [0] => first [1] => second [2] => third [3] => first [4] => fourch )
?>

 6、array_diff,array_diff_key 和 array_diff_assoc

array_diff() 函数返回两个数组的差集数组(注意:这个函数只比较值,不比较键,并且不改变原数组);作用=>可以用作删除数组中指定项的方法

array_diff(array1,array2...),array1表示比较的目标数组,其他的表示需要与目标数组比较的数组

而array_diff_key是只比较键名,键值不做比较,array_diff_assoc是键名和键值都比较

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
$b = ['d' => 'first', 'b' => 'fourth', 'c' => 'third'];
print_r(array_diff($a, $b));
//输出 Array ( [b] => second )
print_r(array_diff_key($a, $b));
//输出 Array ( [a] => first )
print_r(array_diff_assoc($a, $b));
//输出 Array ( [a] => first [b] => second )
?>

7、array_intersect,array_intersect_assoc 和 array_intersect_key

array_intersect(array1,array2,array3...) 函数用于比较两个(或更多个)数组的键值,并返回交集。

array_intersect_key(array1,array2,array3...)函数使用键名比较计算数组的交集。

array_intersect_assoc(array1,array2,array3...)函数用于比较两个(或更多个)数组的键名和键值,并返回交集。

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
$b = ['a' => 'first', 'b' => 'fourth', 'd' => 'third'];
print_r(array_intersect($a, $b));
//输出 Array ( [a] => first [c] => third )
print_r(array_intersect_key($a, $b));
//输出 Array ( [a] => first [b] => second )
print_r(array_intersect_assoc($a, $b));
//输出 Array ( [a] => first ) 
?>

8、array_fill,array_fill_keys

array_fill(start,length,value)表示用给定的键值来填充数组start表示在数组key开始的位置,length表示填充的长度,value表示填充的值,返回一个新数组

array_fill_keys(keys,value)函数使用指定的键和值填充数组。keys使用该数组的值作为键。非法值将被转换为字符串,value表示填充数组所使用的值。返回一个新数组

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
print_r(array_fill(3, 2, 'ok'));
//输出 Array ( [3] => ok [4] => ok )
print_r(array_fill_keys($a, 'ok'));
//输出 Array ( [first] => ok [second] => ok [third] => ok ) 
?>

 9、array_filter,array_reduce,array_map

array_filter(array,callback)表示用callback这个函数来过滤array这个数组,返回一个新数组。

array_reduce(array,callback,initial)该函数是进行迭代的函数,array表示目标函数,callback表示一个function里面接收两个值一个值是上次返回的值,第二个值是当前的值,initial表示初始值

array_map(callback,array)函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数。

注意:这三个函数方法的参数的位置

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
$b = array_filter($a, function () {
    print_r(func_get_args());
    //得到的参数的数组的每一项
    //输出 Array ( [0] => first ) Array ( [0] => second ) Array ( [0] => third )
    return func_get_arg(0) == 'first';
});
print_r($b);
//输出 Array ( [a] => first )
$c = array_map(function ($v) {
    print_r(func_get_args());
    //得到的参数的数组的每一项
    //输出 Array ( [0] => first ) Array ( [0] => second ) Array ( [0] => third )
    return $v . 'add';
}, $a);
print_r($c);
//输出 Array ( [a] => firstadd [b] => secondadd [c] => thirdadd )

echo '<br>';
$t = array_reduce($a, function ($m, $n) {
    var_dump($m, $n);
    return $m . $n;
}, 1);
print_r($t);
//输出的结果如下
//int(1) string(5) "first" 
//string(6) "1first" string(6) "second" 
//string(12) "1firstsecond" string(5) "third" 
//1firstsecondthird
?>

 10、array_keys,array_key_exists,array_search,in_array

array_keys(array)返回包含数组中所有键名的一个新数组

array_key_exists(key,array)函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。key表示需要查找的键值,array表示目标数组

array_search(key,array,strict)在数组中查找值,key表示查找的值,array表示目标数组,strict表示是否按严格模式(默认是false),严格模式是指值和格式相同,如果存在则返回键,不存在返回false

in_array(key,array)判断目标数组中是否含有指定的值

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
print_r(array_keys($a));
//输出 Array ( [0] => a [1] => b [2] => c )
var_dump(array_key_exists('b', $a));
//输出 bool(true)
echo '<br>';
var_dump(array_search('second', $a));
//输出 string(1) "b"
echo '<br>';
var_dump(in_array('first',$a));
//输出 bool(true)
?>

 11、array_flip,array_reverse,array_unique

array_flip(array)反转数组中所有的键以及它们关联的值,返回新数组,原数组不改变

array_reverse(array)以相反的元素顺序返回数组,原数组不改变

array_unique(array)移除数组中重复的值,原数组不改变

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third', 'd' => 'second'];
print_r(array_flip($a));
//输出 Array ( [first] => a [second] => d [third] => c )
print_r(array_reverse($a));
//输出 Array ( [d] => second [c] => third [b] => second [a] => first )
print_r(array_unique($a));
//输出 Array ( [a] => first [b] => second [c] => third ) 
?>

12、array_sum,array_product

array_sum(array)表示求数组中所有数的总和,如果是非数字,那为按0计算

array_product(array)表示求数组中所有数的乘积,如果含有非数字,那么总乘为0

<?php
header('Content-type:text/html;charset=utf8');
$a = [1, 2, 3, 4, 5];
var_dump(array_product($a));
//输出 int(120)
var_dump(array_sum($a));
//输出 int(15)
?>

 13、array_rand,array_pad,array_slice

array_rand(array,number)函数返回数组中的随机键名,或者如果您规定函数返回不只一个键名,则返回包含随机键名的数组

array_pad(array,length,value)函数将指定数量的带有指定值的元素插入到数组中,array表示目标数组,length表示修改后的数组长度,value表示插入项的值

array_slice(array,start,length,preserve)函数在数组中根据条件取出一段值,并返回。array表示目标数组,start表示开始的位置,length表示截取的长度,preserve表示是否保留原有的键(默认是false即不保留)

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third', 'd' => 'fourth', 'e' => 'fifth', 'f' => 'sixth'];
$b = ['first', 'second', 'third'];
print_r(array_rand($a, 3));
//输出 Array ( [0] => a [1] => c [2] => d ) 
print_r(array_pad($b, 4, 'ok'));
//输出 Array ( [0] => first [1] => second [2] => third [3] => ok )
print_r(array_slice($b, 1, 2, true));
//输出 Array ( [1] => second [2] => third )
?>

 14、array_pop,array_push,array_shift,array_unshift,array_splice

array_pop(array)删除目标数组的最后一项,返回删除的项

array_push(array,value1,value2...)函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。

array_shift(array) 函数删除数组中第一个元素,并返回被删除元素的值。

array_unshift(array,value1,value2...)函数用于向数组插入新元素。新数组的值将被插入到数组的开头,然后返回新数组的长度

array_splice(array,start,length,array)函数从数组中移除选定的元素,并用新元素取代它。该函数也将返回包含被移除元素的数组,array表示目标数组,start表示删除元素的开始位置,length表示删除元素的个数,array表示需要插入到数组中的元素,如果只有一个值,那么用字符串表示即可

注意:以上方法均会改变原数组

<?php
header('Content-type:text/html;charset=utf8');
$a = ['first', 'second', 'third', 'fourth', 'fifth'];
array_pop($a);
print_r($a);
//输出 Array ( [0] => first [1] => second [2] => third [3] => fourth )
array_push($a, 'fifth', 'sixth');
print_r($a);
//输出 Array ( [0] => first [1] => second [2] => third [3] => fourth [4] => fifth [5] => sixth )
array_shift($a);
print_r($a);
//输出 Array ( [0] => second [1] => third [2] => fourth [3] => fifth [4] => sixth )
array_unshift($a, 'zero', 'first');
print_r($a);
//输出 Array ( [0] => zero [1] => first [2] => second [3] => third [4] => fourth [5] => fifth [6] => sixth )
array_splice($a, 3, 4, ['A', 'B', 'C', 'D']);
print_r($a);
//输出 Array ( [0] => zero [1] => first [2] => second [3] => A [4] => B [5] => C [6] => D )
?>

 15、array_replace,array_replace_recursive

array_replace(array1,array2,array3...)函数表示使用后面数组的值替换第一个数组的值。如果key值和array1中的key相同,那么值会进行覆盖否则会创建新值(相当于jquery里的$.extend)

array_replace_recursive(array1,array2,array3...)函数递归地使用后面数组的值替换第一个数组的值。如果是多维数组,但是没有明细出后面array2及以后数组的明细项,那么功能将会和array_replace一样

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
$b = ['a' => 'A', 'B', 'c' => 'C'];
$t = array_replace($a, $b);
print_r($t);
//输出 Array ( [a] => A [b] => second [c] => C [0] => B )
echo '<br>';
$a = ['first' => ['red', 'blue'], 'second' => ['yellow', ['green']]];
$b = ['first' => ['black'], 'second' => ['white', ['pink']]];
$t = array_replace_recursive($a, $b);
print_r($t);
//输出如下结果
/*
Array
(
    [first] => Array
    (
        [0] => black
        [1] => blue
        )
    [second] => Array
(
    [0] => white
    [1] => Array
(
    [0] => pink
)
        )
)
*/
?>

 16、array_walk,array_walk_recursive

array_walk(array,callback,userdata...)函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。array表示目标数组,callback表示回调函数里面会接收到两个参数一个是每一项的value和key以及传入的参数,userdata表示用户传入的参数

array_walk_recursive(array,callback,userdata...)用法同上,不同之处是本方法是遍历多维数组

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => ['third']];
$b = array_walk($a, function ($v, $k, $p) {
    var_dump(func_get_args());
    echo '<br>';
}, 'add');
//输出如下
//array(3) { [0]=> string(5) "first" [1]=> string(1) "a" [2]=> string(3) "add" }
//array(3) { [0]=> string(6) "second" [1]=> string(1) "b" [2]=> string(3) "add" }
//array(3) { [0]=> array(1) { [0]=> string(5) "third" } [1]=> string(1) "c" [2]=> string(3) "add" }
$b = array_walk_recursive($a, function ($v, $k, $p) {
    var_dump(func_get_args());
    echo '<br>';
}, 'add');
//输出如下
//array(3) { [0]=> string(5) "first" [1]=> string(1) "a" [2]=> string(3) "add" }
//array(3) { [0]=> string(6) "second" [1]=> string(1) "b" [2]=> string(3) "add" }
//array(3) { [0]=> string(5) "third" [1]=> int(0) [2]=> string(3) "add" }

//多维数组转换成一维数组
$all = [];
$array = [
    'name' => 'xiaoming',
    'age' => 30,
    'class' => [
        'lan' => ['set' => 'ok'],
        'get' => 'hello'
    ]
];
//注意引用
array_walk_recursive($array, function ($value, $key) use (&$all) {
    $all[$key] = $value;
});
print_r($all);
//输出 Array ( [name] => xiaoming [age] => 30 [set] => ok [get] => hello )
?>

 17、extract,list,shuffle

extract(array,extract_rules,prefix)表示函数从数组中将变量导入到当前的符号表,array表示目标数组,extract_rules表示对变量名称的检查,并做处理,prefix表示在变量前加前缀(后面两个参数是可选的)

list(val1,val2,val3...)表示函数用于在一次操作中给一组变量赋值,注意:该函数只用于数字索引的数组,且假定数字索引从 0 开始

shuffle(array)表示函数把数组中的元素按随机顺序重新排列,shuffle会改变原有数组

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
extract($a);
echo $a, $b, $c;
//输出 firstsecondthird
$b = ['are', 'you', 'ok'];
list($first, $second, $third) = $b;
var_dump($first, $second, $third);
//输出 string(3) "are" string(3) "you" string(2) "ok"
$t = shuffle($b);
print_r($b);
//输出 Array ( [0] => you [1] => are [2] => ok )
?>

 18、compact,range

compact(val1,val2,val3...)函数创建包含变量名和它们的值的数组(与extract相对)

range(low,high,step)函数创建一个包含指定范围的元素的数组,low表示数组的最低值,high表示数组的最高值,step表示数组的步长,默认是1

当range('a','z',1),那么会实现一个a-z填充的数组,range('A','Z',1),那么会出现一个A-Z的填充数组

<?php
header('Content-type:text/html;charset=utf8');
$a = 'first';
$b = 'second';
$c = 'third';
print_r(compact('a', 'b', 'c'));
//输出 Array ( [a] => first [b] => second [c] => third ) 
print_r(range(0, 5, 2));
//输出 Array ( [0] => 0 [1] => 2 [2] => 4 )
?>

 19、count,end,reset

count(array)返回数组的长度

end(array)返回目标数组的最后一项,并且把当前指针指向最后一项

reset(array)返回目标数组的第一项,并且把当前指针指向第一项

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
var_dump(count($a));
//输出 int(3)
var_dump(end($a));
//输出 string(5) "third"
var_dump(reset($a));
//输出 string(5) "first"
?>

 20、current,next,prev,key

current(array)表示当前数组的指针指向的当前元素的值

next(array)表示把指针向下移一个单位,并且返回指向元素的值,如果没有则返回false

prev(array)表示把指针向上移一个单位,并且返回指向元素的值,如果没有则返回false

key(array) 返回当前指针指向元素的key值,如果没有返回false

<?php
header('Content-type:text/html;charset=utf8');
$a = ['a' => 'first', 'b' => 'second', 'c' => 'third'];
var_dump(current($a));
//输出 string(5) "first"
var_dump(next($a));
//输出 string(6) "second"
var_dump(key($a));
//输出 string(1) "b"
var_dump(prev($a));
//输出 string(5) "first"
?>

 21、array_multisort

sorting type分别有SORT_REGULAR,SORT_NUMERIC,SROT_STRING三种常用的类型(会改变原数组)

array_multisort(array1,sorting order,sorting type,array2,array3...)表示对数组进行排序,改变的是原数组,array1表示目标数组,sorting order表示排列的顺序,sorting type表示排列的依据

<?php
header('Content-type:text/html;charset=utf8');
$a = [1, 3, 5, 13, 7];
$t = array_multisort($a, SORT_ASC);
print_r($a);
//输出 Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 13 )
?>

对数级里的数级或者对象进行排序

<?php
header('content-type:text/html;charset=utf8');
ini_set('display_errors', true);

class A
{
    public $name;
    public $age;

    public function __construct($name, $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
}

$p1 = new A('aaa', 12);
$p2 = new A('bbb', 8);
$p3 = new A('ccc', 32);
$p4 = new A('ddd', 34);
$p5 = new A('eee', 28);
$array = compact('p1', 'p2', 'p3', 'p4', 'p5');
$age = array_column($array, 'age');
array_multisort($age, SORT_ASC, SORT_NUMERIC, $array);
var_dump($array);
?>
<?php
header('content-type:text/html;charset=utf8');
ini_set('display_errors', true);

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
array_multisort($volume, SORT_DESC, SORT_NUMERIC, $edition, SORT_ASC, SORT_NUMERIC, $data);
echo '<pre>';
var_dump($data);
//输出
//volume | edition
//-------+--------
//    98 | 2
//    86 | 1
//    86 | 6
//    85 | 6
//    67 | 2
//    67 | 7
?>

22、asort,ksort,arsort,krsort

sorting type分别有SORT_REGULAR,SORT_NUMERIC,SROT_STRING三种常用的类型,并且这几个数据改变的是原数组

asort(array,sortingtype)函数对关联数组按照键值进行升序排序。array表示目标数组,sortingtype表示排列的依据

ksort(array,sortingtype)函数对关联数组按照键名进行升序排序。

arsort(array,sortingtype)函数对关联数组按照键值进行降序排序。

krsort(array,sortingtype)按照键名对关联数组进行降序排序。

<?php
header('Content-type:text/html;charset=utf8');
$a = [1, 3, 5, 13, 7];
asort($a, SORT_NUMERIC);
print_r($a);
//输出 Array ( [0] => 1 [1] => 3 [2] => 5 [4] => 7 [3] => 13 )
arsort($a, SORT_NUMERIC);
print_r($a);
//输出 Array ( [3] => 13 [4] => 7 [2] => 5 [1] => 3 [0] => 1 )
ksort($a, SORT_NUMERIC);
print_r($a);
//输出 Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 13 [4] => 7 )
krsort($a, SORT_NUMERIC);
//输出 Array ( [4] => 7 [3] => 13 [2] => 5 [1] => 3 [0] => 1 )
?>

23、uasort,uksort

uasort(array,callback)根据自定义的回调对数组的值进行排序

uksort(array,callback)根据自定义的回调对数组的键名进行排序

<?php
header('Content-type:text/html;charset=utf8');
$a = [1, 3, 5, 13, 7, 4, 6, 8];
uasort($a, function ($m, $n) {
    return $m > $n ? 1 : -1;
});
//输出 Array ( [0] => 1 [1] => 3 [5] => 4 [2] => 5 [6] => 6 [4] => 7 [7] => 8 [3] => 13 )
uksort($a, function ($m, $n) {
    return $m > $n ? 1 : -1;
});
print_r($a);
//输出 Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 13 [4] => 7 [5] => 4 [6] => 6 [7] => 8 )
?>
原文地址:https://www.cnblogs.com/rickyctbu/p/9801876.html