php一维数组删除指定一维数组的值
PHP中一维数组的使用频率可唯是真多呀,这么突然看这个标题,可能phper们不是太能理解,怎么说吧,最近遇到这样的一个php需求,我是先生成了一个php的一维数组,然后需要在一维数组里面去删除某个值,如果仅是删除一个指定数组值的话,是完全可以使用php数组函数 array_splice 或者 unset 函数来解决的,我们来看一下相关的代码。
方法一,使用 array_splice 删除指定php数组值,代码如下:
- <?php
- $arr1 = array(1,3, 5,7,8);
- $key = array_search(3, $arr1);
- if ($key !== false)
- array_splice($arr1, $key, 1);
- var_dump($arr1);
- ?>
输出:array(4) { [0]=> int(1) [1]=> int(5) [2]=> int(7) [3]=> int(8) }
方法二,使用 unset 删除指定 php 数组值,代码如下:
- <?php
- $arr2 = array(1,3, 5,7,8);
- foreach ($arr2 as $key=>$value)
- {
- if ($value === 3)
- unset($arr2[$key]);
- } //www.xiariboke.net
- var_dump($arr2);
- ?>
输出:array(4) { [0]=> int(1) [2]=> int(5) [3]=> int(7) [4]=> int(8) }
我们可以看到,如果在php的一维数组中是可以很轻松的就删除掉一个指定的元素值,当然这两种方法是有区别的,使用 array_splice()函数删除的话,数组原本的索引值也发生了变化,而如果使用 unset() 函数的话,则原本的索引值不变。
好了,哪么问题来了,如果我们要在当前的一维数组中删除的对象又是一个一维数组该怎么办呢,举个例子,如果我的当前数组是 A 数组,值为如下:
- $data = array{
- [0]=> int(1),
- [1]=> int(3),
- [2]=> int(5),
- [3]=> int(7),
- [4]=> int(8),
- };
我想删除的对象也是一个一维数组,其实质就是删除两个值,删除的对象数组如下:
- $data = array{
- [0]=> int(5),
- [1]=> int(7),
- };
我想删除的是当前数组中的 5和7两个数字,当然我也想到使用上述删除指定元素的值了,直接使用一个循环就可以删除掉两个值,但关键是上述所return的值是已删除的数组,显然并没有什么用,当然,也可以两次删除,但如果我要删除三个指定元素,N个指定元素呢,总不能每次都要赋值吧。
好了,php中函数很多,总有拼拼合合的时候,直接使用如下的方法,完美解决,代码如下:
$new_array= array_merge(array_diff($array1, array_intersect($array1,$array2)),array_diff($array2, array_intersect($array1,$array2)));
其中 $array1 是要删除的对象一维数组,$array2是当前一维数组,删除成功之后赋值给新数组 $new_array,完美解决所有问题。
$arr1=array(1,3,5,7,8);
$arr2=array(5,7);
$arr=array_diff($arr1,$arr2);
print_r($arr1);
echo ”;
print_r($arr2);
echo ”;
print_r($arr);
好吧,我想说:直接取差集就好