PHP的数组函数整理

一、数组的创建

1、array()

生成一个数组

2、array_combine()

生成一个数组,用一个数组的值作为键名,另一个数组值作为值

$a1=array("a","b","c","d");
$a2=array("Cat","Dog","Horse","Cow");
print_r(array_combine($a1,$a2));

3、range()

创建并返回一个包含指定范围的元素的数组

$number = range(0,50,10);
print_r ($number);

4、compact()

创建一个由参数所带变量组成的数组

 //多个变量转数组
    $name='phpff';
    $email='phpff@phpff.com';
    $info=compact('name','email');//传递变量名
    print_r($info);
    /*
    Array
    (
        [name] => phpff
        [email] => phpff@phpff.com
    )
    */

extract 数组转多个变量

//数组转多个变量
    $capitalcities['England'] = 'London';
    $capitalcities['Scotland'] = 'Edinburgh';
    $capitalcities['Wales'] = 'Cardiff';
    extract($capitalcities);//转变成三个变量 England,Scotland,Wales
    print $Wales;//Cardiff

5、array_fill()

用给定的值生成数组

//array_fill(开始的下标,大于零的个数,填充内容)
$arr = array_fill(2,3,"Dog");//从下标2开始填充3个‘dog’元素
print_r($arr);

二、数组合并和拆分

1、array_chunk()

把一个数组分割成新的数组块

$urls=Array(
    0=>'http://cpc.people.com.cn/GB/64114/75347/',
    1=>'http://www.moe.edu.cn',
    2=>'http://www.mof.gov.cn',
    3=>'http://www.mohrss.gov.cn',
    4=>'http://www.jszzb.gov.cn',
    5=>'http://www.ec.js.edu.cn');
$urls=array_chunk($urls, 2, true);//注意此处的第三个参数 true会保留之前的下标
var_dump($urls);

2、array_merge()

把两个或多个数组合并为一个数组

$arr = ['name'=>'jack','age'=>18,'shuai'];
$arr2 = ['role'=>'admin'];
$arr3 = '';
$arr4 = null;

var_dump(array_merge($arr,$arr2));
var_dump(array_merge($arr,$arr3));//此处会报错可以使用:(array)$arr3 强制转换
var_dump(array_merge($arr,$arr4));//此处会报错合并后为null

关于覆盖和重写索引:https://wxb.github.io/2017/03/17/PHP%E6%95%B0%E7%BB%84%E5%90%88%E5%B9%B6%EF%BC%9Aarray-merge%E5%92%8C.html

3、array_slice()

在数组中根据条件取出一段值,并返回

$arr = array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_slice($arr,1,2));

$arr = array("a"=>"Dog","b"=>"Cat","c"=>"Horse","d"=>"Bird");
print_r(array_slice($arr,1,2));

三、数组比较

1、array_diff()

返回两个数组的差集数组.

  • 只能用在一维数组上, 对多维数组无效.
  • 用在一维数组上, 也只比较了值, 并没有比较键, 也就是说只要值是一样的, 就会被剔除掉, 而不管键是否一样
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","j"=>"yellow");

$result=array_diff($a1,$a2,$a3);
print_r($result);

2、array_intersect()

返回两个或多个数组的交集数组

$fruit1 = array("Apple","Banana","Orange");
$fruit2 = array("Pear","Apple","Grape");
$fruit3 = array("Watermelon","Orange","Apple");
$intersection = array_intersect($fruit1, $fruit2, $fruit3);
print_r($intersection);

四、数组查找替换

1、array_search()

在数组中查找一个键值,如果成功则返回相应的键名,否则返回 FALSE

$arr_a = array(0 => "a", 1 => "b", 2 => "c");
$key = array_search("a", $arr_a);
if( $key !== FALSE ){
    echo "键名为:$key";
} else {
    echo '无匹配结果';
}

2、array_splice()

在数组中一部分删除用其他值替代

// 删除cat
$arr = array('apple','banana','cat','dog');
unset($arr[2]);
print_r($arr);

//自定义函数
function array_remove(&$arr, $offset)
{  
    array_splice($arr, $offset, 1); 
}

$arr = array('apple','banana','cat','dog');
array_remove($arr, 2);
print_r($arr);

3、array_sum()

返回数组中的所有值得总和

$arr = array(5,15,25);
echo array_sum($arr);

4、in_array()

在数组中搜索给定的值,区分大小写

$people = array("Bill", "Steve", "Mark", "David");

if(in_array("Mark", $people))
{
  echo "匹配已找到";
}
else
{
  echo "匹配未找到";
}

5、array_key_exists()

判断某个数组中是否存在指定的key

$arr = ["Volvo"=>"XC90","BMW"=>"X5"];
if (array_key_exists("Volvo",$arr))
{
  echo "键存在!";
}else{
  echo "键不存在!";
}

五、数组指针操作

1、current():获取目前指针位置的键值

$arr = ['mo'=>'白晶晶','zhuyin'=>'紫霞','cai'=>'小甜甜'];
var_dump(current($arr)); //白晶晶

2、key():获得目前指针位置的索引值

$arr = ['mo'=>'白晶晶','zhuyin'=>'紫霞','cai'=>'小甜甜'];
var_dump(key($arr)); //mo

3、next():将数组中的内部指针移动到下一个单元

$arr = ['mo'=>'白晶晶','zhuyin'=>'紫霞','cai'=>'小甜甜'];
var_dump(next($arr)); //紫霞

4、prev():将数组中的内部指针移动到上一个单元

$arr = ['mo'=>'白晶晶','zhuyin'=>'紫霞','cai'=>'小甜甜'];
var_dump(next($arr)); //紫霞
var_dump(prev($arr));  //白晶晶

5、end():将数组中的内部指针移动到最后一个单元

$arr = ['mo'=>'白晶晶','zhuyin'=>'紫霞','cai'=>'小甜甜'];
var_dump(end($arr));//小甜甜

6、reset():将数组中的内部指针移动到第一个单元

$arr = ['mo'=>'白晶晶','zhuyin'=>'紫霞','cai'=>'小甜甜'];
var_dump(reset($arr));//白晶晶

7、each和list使用

a、关于each()

返回数组中当前指针位置的键/值.并向前移动数组指针

$array = array("value1", "value2", "value3", "value4");
$first = each($array);
print_r($first);
$two = each($array);
print_r($two);

/*
Array
(
    [1] => value1
    [value] => value1
    [0] => 0
    [key] => 0
)
Array
(
    [1] => value2
    [value] => value2
    [0] => 1
    [key] => 1
)
//键名为0,1,key和 value。单元 0和 key 包含有数组单元的键名,1 和 value 包含有数据。
*/

b、关于list()

把数组中的值赋给一些变量,它不是真正的函数,而是语言结构

该函数只用于数字索引的数组,且假定数字索引从 0 开始

$info = ['看月亮','小甜甜','牛夫人'];
list($var1,$var2,$var3) = $info;
echo "\"一起{$var1}的时候叫人家{$var2},现在新人胜旧人了,就叫人家{$var3}。\"";

//list() 不能对字符串起作用
list($jack) = "聂哥";
var_dump($jack); // NULL

//假定数字索引从 0 开始
$array = ['a','5'=>b,'3'=>c];
list($a,$b,$c) = $array;

var_dump($array);
var_dump($a,$b,$c);//a null null

c、结合使用

$role = ['mo'=>'白晶晶','zhuyin'=>'紫霞'];
$role['zhou'] = '至尊宝';

while ( list( $key, $value ) = each($role)){
    echo $key.'--'.$value,'<br/>';
}

//while里的表达式
$info = [];
var_dump(list($key,$value) = each($info));//false;

8、array_shift

删除数组中的第一个元素,并返回被删除元素的值

$arr = array("a"=>"red","b"=>"green","c"=>"blue");
echo array_shift($arr);
print_r($a);

9、array_unshift

在数组开头插入一个或多个元素

$arr = array("a"=>"red","b"=>"green");
array_unshift($arr,"blue");
print_r($arr);

10、array_push()

向数组最后压入一个或多个元素

$arr = array("red","green");
array_push($arr,"blue","yellow");
print_r($a);   //Array ( [0] => red [1] => green [2] => blue [3] => yellow )

11、array_pop()

删除数组中的最后一个元素

$arr = array("red","green","blue");
array_pop($arr);
print_r($arr);    //Array ( [0] => red [1] => green )

六、数组键值操作

1、shuffle()

将数组打乱,保留键名

$my_array = array("red","green","blue","yellow","purple");
shuffle($my_array);
var_dump($my_array);

2、count()

计算数组中的元素个数

$cars = array("Volvo","BMW","Toyota");
echo count($cars);

3、array_flip()

返回一个键值反转后的数组

$arr = array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$result = array_flip($arr);
var_dump($result);

4、array_keys()

返回数组所有的键,组成一个数组

$arr = array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_keys($arr));

5、array_values()

返回数组中的所有值,组成一个数组

$arr = array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_values($arr));

6、array_reverse()

返回一个元素顺序相反的数组

$arr = array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");
print_r(array_reverse($arr));

7、array_count_values()

统计数组中所有值出现的次数

$a = array("A","Cat","Dog","A","Dog");
print_r(array_count_values($a));

8、array_rand()

从数组中随机抽取一个或多个元素,注意是键名;当提取的数量是数组长度的时候,不会随机

$a = array("red","green","blue","yellow","brown");
$random_keys = array_rand($a,3);
var_dump($random_keys);

echo $a[$random_keys[0]]."<br>";
echo $a[$random_keys[1]]."<br>";
echo $a[$random_keys[2]];

9、each()

返回数组中当前的键/值对,并将数组指针向前移动一步

10、array_unique()

删除重复值,返回剩余数组

$arr = array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($arr));
// Array ( [a] => red [b] => green )

七、数组排序

1、sort()

按升序对给定的数组的值排序,不保留键名

$cars = array("Volvo","BMW","Toyota");
sort($cars);
print_r($cars);  //Array ( [0] => BMW [1] => Toyota [2] => Volvo )

2、rsort()

函数对数值数组进行降序排序

$cars = array("Volvo","BMW","Toyota");
rsort($cars);
print_r($cars);  //Array ( [0] => Volvo [1] => Toyota [2] => BMW )

3、asort()

对数组排序,保持索引关系

$age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31");
asort($age);

print_r($age);//Array ( [Mark] => 31 [Steve] => 56 [Bill] => 60 )

4、arsort()

对数组逆向排序,保持索引关系

$age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31");
arsort($age);

print_r($age);//Array ( [Bill] => 60 [Steve] => 56 [Mark] => 31 )

5、ksort()

按键名对数组排序

$age=array("Bill"=>"60","mark"=>"31","Steve"=>"56");
ksort($age);
print_r($age);  //Array ( [Bill] => 60 [Steve] => 56 [mark] => 31 )

6、krsort()

将数组按照键名逆向排序

$age=array("Bill"=>"60","mark"=>"31","Steve"=>"56");
krsort($age);
print_r($age);  //Array ( [mark] => 31 [Steve] => 56 [Bill] => 60 )