php常用的数组函数去重,PHP常用的数组函数

PHP常用的数组函数

一、array_diff 计算数组的差集语法

array_diff(array $array,array...$arrays):array

参数

array: 要被比对的数组

arrays: 更多比较的数组

返回值

该函数的返回值是一个数组,该数组中包含了在array中但是不在其他数组中的值。值得注意的是,返回的值它对应的键名不会改变,即:保留原数组的键。

案例

$array1=["name"=>'张三',"李四","王五","赵六"];

$array2=["nick"=>'张五',"赵六","李四","柱子"];

$result=array_diff($array1,$array2);

echo print_r($result,true);// Array ( [name] => 张三 [1] => 王五 )

二、array_diff_assoc带索引检查计算数组的差集语法

array_diff_assoc(array $array,array...$arrays):array

参数

array: 要被比对的数组

arrays: 更多比较的数组

返回值

返回一个数组,其中包含array中所有其他数组中不存在的所有值。注意和array_diff()不同的是键名也用于比较。

案例

$array1=["name"=>'张三',"李四","王五","赵六"];

$array2=["nick"=>'张三',"李四","狗子","柱子"];

$result1=array_diff($array1,$array2);

echo print_r($result1,true)."
";// Array ( [1] => 王五 [2] => 赵六 )

$result2=array_diff_assoc($array1,$array2);

echo print_r($result2,true);// Array ( [name] => 张三 [1] => 王五 [2] => 赵六 )

通过上述array_diff()和array_diff_assoc()两个函数的结果可以看出,array1的键值对"name" => "张三"和array2的键值对"nick" => "张三"它们的值都是相等的,但是键名不同,所以在array_diff_assoc()函数中还是会输出该值。相当于使用了严格检查模式。

三、array_intersect_assoc 带索引检查计算数组的交集语法

array_intersect_assoc(array $array, array …$arrays) : array

参数

array: 要检查的数组,该数组作为主值

arrays: 要被对比的数组列表

返回值

返回一个数组,该数组包含了在array中也同时出现在所有其它参数数组中的值。注意和array_intersect()不用的是键名也用于比较。

案例

$array1=["name"=>'张三',"李四","王五","赵六"];

$array2=["nick"=>'张三',"李四","赵六","柱子"];

$result=array_intersect_assoc($array1,$array2);

echo print_r($result,true);// Array ( [0] => 李四 )

以上代码只会输出[0] => 李四,因为只有array2中李四的键值对与array1中的完全相等。

五、array_merge()合并一个或多个数组语法

array_merge(array …$arrays) : array

参数

arrays: 要合并的一个或多个数组

返回值

返回一个合并后的结果数组。

注意

如果输入的数组中有相同的字符串键名,那么后者的值将覆盖前者,但是如果数组包含数字键名,后面的值将不会覆盖原来的值,而是会附加在数组后面。

案例

$array1=['color'=>'blue',3,5];

$array2=['a',5,'color'=>'red',10];

print_r(array_merge($array1,$array2));

// 结果:

// // Array ( [color] => red [0] => 3 [1] => 5 [2] => a [3] => 5 [4] => 10 )

六、array_combine()合并两个数组,其中一个数组的值作为新数组的键,另外一个数组的键作为新数组的值语法

array_combine(array $keys, array $values) : array

参数

keys: 要当做新数组的键。

values: 要当做新数组的值。

返回值

返回一个新数组,如果两个数组的数量不一样将返回false。

案例

以下代码会报错:array_combine(): Both parameters should have an equal number of elements

$array1=['color'=>'blue',3,5];

$array2=['a',5,'color'=>'red',10];

print_r(array_combine($array1,$array2));

结果图:

9c31d5f8c5fbd714885aed8f66446eca.png

正确的代码应该是下面的:

$array1=['color'=>'blue',3,5];

$array2=['a',5,'color'=>'red'];

print_r(array_combine($array1,$array2));// Array ( [blue] => a [3] => 5 [5] => red )

这里有一点值得注意的是:两个数组的单元数量必须是一致的,否则,就会报错。

七、array_flip()交换数组的键和值语法

array_combine(array $array) : array

参数

array: 需要交换键值对的数组。

返回值

成功后返回一个交换了键值对的新数组,如果失败则返回null。

案例

$array=['name'=>'残破的蛋蛋','age'=>30];

$newArray=print_r(array_flip($array),true);

print_r($newArray)."
";// Array ( [残破的蛋蛋] => name [30] => age )

// 该方法不会改变原有数组。

print_r($array);// Array ( [name] => 残破的蛋蛋 [age] => 30 )

注意:该方法不会改变原有数组。

八、array_multisort()对多个数组或多维数组进行排序语法

array_multisort(array &$array1, mixed $array1_sort_order = SORT_ASC, …$array) : array

参数

array1: 要排序的数组。

array1_sort_order:排序方式。SORT_ASC:按照升序排序,SORT_DESC按照降顺序排序。

…$array:可选项,提供更多数组参与排序,提供的数组需要和array1要有相同数量的元素。

返回值

成功返回值ture,失败返回false。

案例

以下是一组从Redis中查询出来的购物车数据列表:

$cart_lists=Array

(

0=>Array

(

'title'=>'黑色连裤袜女显瘦中厚丝袜',

'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',

'num'=>'1',

'goods_id'=>88,

'create_time'=>'1612083130',

'id'=>140,

'price'=>13.90,

'total_price'=>13.9,

'sku'=>'颜色 款式:黑色1条装 款式:踩脚款【高弹力70-135斤】'

),

1=>Array

(

'title'=>'黑色连裤袜女显瘦中厚丝袜',

'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',

'num'=>1,

'goods_id'=>88,

'create_time'=>1612083133,

'id'=>141,

'price'=>9.90,

'total_price'=>9.9,

'sku'=>'颜色 款式:黑色1条装 款式:九分款【高弹力70-135斤】'

),

2=>Array

(

'title'=>'黑色连裤袜女显瘦中厚丝袜',

'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',

'num'=>3,

'goods_id'=>88,

'create_time'=>1612082911,

'id'=>130,

'price'=>16.90,

'total_price'=>50.7,

'sku'=>'颜色 款式:黑色5条装16.9 款式:连裤款【高弹力70-135斤】',

),

4=>Array

(

'title'=>'黑色连裤袜女显瘦中厚丝袜',

'image'=>'http://localhost:8082/upload/image/20201116\a6641df33b4e2507c562e7ed7b3b39ee.jpg',

'num'=>1,

'goods_id'=>88,

'create_time'=>1612082923,

'id'=>133,

'price'=>16.90,

'total_price'=>16.9,

'sku'=>'颜色 款式:黑色3条装12.9 款式:连裤款【高弹力70-135斤】'

)

);

现在我们需要按照用户添加的时间倒序排列购物车里的数据,也就是把最新添加的商品显示在最前面。

$array_column=array_column($cart_lists,"create_time");

print_r($array_column);// Array ( [0] => 1612083130 [1] => 1612083133 [2] => 1612082911 [3] => 1612082923 )

array_multisort($array_column,SORT_DESC,$cart_lists);

print_r($cart_lists);

效果图:

349890cae737d127f649ef3e78c73fb3.png

注意:array_multisort()函数的返回值是ture和false,它是直接在原数组上进行的修改,所以如果要是输出排序后的数组,直接打印原数组即可。

九、array_product()计算数组中所有值的乘积语法

array_product(array $array) : number

参数

array: 参与计算乘积的数组。

返回值

以整数或浮点数返回一个数组中所有值的乘积。

案例

$a=array(2,4,6,9);

echo sprintf('array数组的所有值的乘积是:%d',array_product($a));// array数组的所有值的乘积是:432

以上结果会输出:array数组的所有值的乘积是:432。

十、array_sum()计算数组中所有值的和语法

array_sum(array $array) : number

参数

array: 参与计算和的数组。

返回值

以整数或浮点数返回一个数组中所有值的和。

案例

$a=array(2,4,6,9);

echo sprintf('array数组的所有值的和是:%d',array_sum($a));// array数组的所有值的和是:21

十一、array_replace()使用传递的数组替换第一个数组的元素语法

array_replace(array $array, array $replacement) : array

array_replace()函数使用后面数组元素相同的key值替换前面的数组元素。如果一个键在同时存在于两个数组中,第一个数组中的值将被第二个数组中的值替换掉。

如果一个键存在于第二个数组中,但不存在于第一个数组中,则会在第一个数组中创建这个元素。如果一个键仅存在于第一个数组中,它将保持不变。如果同时传递了多个数组,它们

将被依次处理,后面的数组覆盖前面的值。

参数

array: 被替换的数组。

replacement: 要替换前面数组的数组。

返回值

返回的是一个被替换之后的数组,如果发生错误将返回null。

案例

$array=['blue','yellow','red','lightgreen'];

$replacement1=[0=>'blue','black',2=>'yellow',4=>'voilet'];

$replacement2=[2=>'green'];

print_r(array_replace($array,$replacement1,$replacement2));

以上结果会输出:Array ( [0] => blue [1] => black [2] => green [3] => lightgreen [4] => voilet )。

十二、array_unique()移除数组中重复的值语法

array_uniqure(array $array, int $sort_flags = SORT_STRING) : array

array_uniqure()函数先将值作为字符串排序,然后每个值值保留第一个遇到的键名,接着会忽略后面所有的键名

注意:该方法会保留键名,当且仅当($string) $ele1 === (string) $ele2时,才认为两个元素相同。

参数

array: 需要去重的数组。

返回值

返回的是一个被过滤之后的新数组。

案例1

$array=['a'=>'blue','b'=>'yellow','blue','red','green','lightgreen'];

$result=array_unique($array,SORT_LOCALE_STRING);

print_r($result);

以上代码会输出:Array ( [a] => blue [b] => yellow [1] => red [2] => green [3] => lightgreen )。

案例2

$array=[4,"3",1,4,"2","4",2,3];

$result=array_unique($array,SORT_NUMERIC);

print_r($result);

以上代码会输出:Array ( [0] => 4 [1] => 3 [2] => 1 [4] => 2 )。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值