1. array_rand(array $input [, int $num_req = 1 ])
从数组中取出一个或多个随机单元,返回键名key,而不是返回数组
2. implode(‘,’,$arr)
当$arr中只有一个元素时,最终的字符串是不加分隔符‘,’的;
3. array_filter()
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
返回:过滤后的新数组
function odd($var)
{
return($var & 1);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
print_r(array_filter($array1, "odd"));
输出:
Array
(
[a] => 1
[c] => 3
[e] => 5
)
----------
//如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
print_r(array_filter($entry));
输出:
Array
(
[0] => foo
[2] => -1
)
4.end($arr)
end() 将 array 的内部指针移动到最后一个单元并返回其值。
$arr = array('a','b','c','d','e');
echo end($arr);//输出 e
5.array_diff()
Array_diff(
arr1,
arr2)对比返回在array1但不在array2中的值,
图中蓝色部分:
6. array_walk()
使用用户自定义函数对数组中的每个元素做回调处理,主要是函数处理过程
bool array_walk ( array \&$array , callable \$funcname [, mixed \$userdata = NULL ] )
参数:
$array: 输入的数组。
$funcname: 回调函数,典型情况下$funcname 接受两个参数。$array 参数的值作为第一个, 键名作为第二个。若给第一个参数传引用,可以改变数组的值。
$userdata: 如果提供了可选参数$userdata ,将被作为第三个参数传递给 $funcname。返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
//**传引用,改变了所传参数组**
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2<br />\n";
}
echo "Before ...:\n";
//单数组
array_walk($fruits, 'test_print');
//带额外参数
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";
array_walk($fruits, 'test_print');
输出:
Before …:
d. lemon
a. orange
b. banana
c. apple
… and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple
7. array_map()
array array_map ( callable $callback , array $array1 [, array $… ] )
单数组时:
返回数组,是 array1 每个元素应用 callback函数之后的数组。(不改变原数组)
callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样
主要是返回值
function myfunction($v)
{
if ($v==="Dog")
{
return "Fido";
}
return $v;
}
$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a));
输出:
Array
(
[0] => Horse
[1] => Fido
[2] => Cat
)
多数组时:
function myfunction1($v1,$v2)
{
if ($v1===$v2)
{
return "same";
}
return "different";
}
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction1",$a1,$a2));
输出:
Array
(
[0] => different
[1] => same
[2] => different
)
array_map()和array_walk()的区别:
array_map主要是为了得到你的回调函数处理后的新数组,要的是结果;
array_walk主要是对每个参数都使用一次你的回调函数,要的是处理的过程。
array_map里面的回调函数一定有返回值,返回值组成了新数组作为array_map的返回值。但array_walk可以没有返回值,他主要是处理过程。
array_walk可以提供额外参数给回调函数,map不可以
array_walk可以改变原数组(传引用),map不可以
8. array_multisort()
对多维数组排序
bool array_multisort ( array **&$arr** [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
该函数改变了原数组,
返回值:true和false
$a1 = array('a'=>1,'b'=>8,'c'=>5,'d'=>8);
$a2 = array('e'=>2,'f'=>2,'g'=>3,'h'=>5);
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
输出:
Array
(
[a] => 1
[c] => 5
[b] => 8
[d] => 8
)
Array
(
[e] => 2
[g] => 3
[f] => 2
[h] => 5
)
//分析:a和e永远对应,c和g永远对应。。。可以把每个数组想像成数据库表的一列。每一行的对应关系不会因为排序改变。第二个数组会跟着第一个数组的排序而排序
参数:每个数组后面都能加两个参数,默认是SORT_ASC ,SORT_REGULAR;
若第一个数组按升续,第二个按降续,则第二个数组首先会按照跟$arr原有的关联关系排序,当第一个数组有相同值的情况下,对应第二个数组才会按降续排列
$guys =[
['name'=>'jim','score'=>14,'grade'=>2],
['name'=>'jack','score'=>12,'grade'=>3],
['name'=>'tom','score'=>34,'grade'=>3],
['name'=>'kaka','score'=>9,'grade'=>5],
['name'=>'john','score'=>12,'grade'=>4],
];
foreach ($guys as $row) {
$arr['name'][]=$row['name'];
$arr['score'][]=$row['score'];
$arr['grade'][]=$row['grade'];
}
array_multisort($arr['score'],SORT_DESC,$arr['grade'],$arr['name']);
结果:
9. compact()
建立一个数组,包含变量名和他的值
$name = 'jim';
$age = 12;
$gender = 'male';
$arr = compact('name','age','gender');
print_r($arr);
输出:
Array
(
[name] => jim
[age] => 12
[gender] => male
)
----------
方便生成一个关联数组
$name = [‘tom’,’lili’,’john’];
print_r(compact(‘name’));
输出:
Array
(
[name] => Array
(
[0] => tom
[1] => lili
[2] => john
)
)
10. array_merge()
1) 键名相同的话,后面的数组会将前面数组中键相同的值覆盖。
$arr1 = array('a'=>'1','b'=>'2');
$arr2 = array('a'=>'1','b'=>'3','c'=>'2');
$ret = array_merge($arr1,$arr2);
print_r($ret);
Array
(
[a] => 1
[b] => 3
[c] => 2
)
2) 数组中的键名为数字时(索引数组也一样),会格式化键名并保留所有键值。
$arr1 = array(1=>'1',2=>'2');
$arr2 = array(1=>'1',2=>'3',6=>'2');
$ret = array_merge($arr1,$arr2);
print_r($ret);
Array
(
[0] => 1
[1] => 2
[2] => 1
[3] => 3
[4] => 2
)
3) 若想要键名重复的时候保留前者,使用 +
$arr1 = array('a'=>1,'b'=>2);
$arr2 = array('a'=>1,'b'=>3,'c'=>6);
$ret = $arr1+$arr2;
print_r($ret);
Array
(
[a] => 1
[b] => 2
[c] => 6
)
//注:array_merge()后面覆盖前面,+ 前面的覆盖后面
11. array_sum()
数组中所有值的总和
12. array_key_exists()
判断某个数组中是否存在指定的 key
13. mb_convert_variables($to_encoding, $from_encoding,&$var)
转换一个或多个变量的字符编码;
$var可以接受 String、Array 和 Object 的类型
成功返回转换前的字符编码,失败返回false
mb_convert_variables('GBK','UTF-8',$row);
14. array_column($arr,$column_key[,$index_key])
返回数组中$column_key一列的值,若指定了$index_key,则$index_key一列将作为键名,$column_key一列作为键值。
$arr = [
['name'=>'John','gender'=>'male'],
['name'=>'Lily','gender'=>'female'],
['name'=>'James','gender'=>'male'],
];
//可以将二维数组快速转为一维,不用遍历
$res1 = array_column($arr,'name');
print_r($res1);
输出:
Array
(
[0] => John
[1] => Lily
[2] => James
)
----------
$res2 = array_column($arr,'gender','name');
print_r($res2);
输出:
Array
(
[John] => male
[Lily] => female
[James] => male
)