php数组函数

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 $... ]]] ) 
该函数改变了原数组,
返回值:truefalse
$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
)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值