php数组删除元素 删除指定键值元素
这个属于PHP操作数组的基本应用,但是小应用有大用途,而且一不留心操作错了,还可能给你造出意想不到的bug。
最近写程序的时候要拼装一个检索数组,要求每个栏目的检索条件还不一样,于是乎将获取到的检索条件数组把不属于该栏目的剔除,开始想都没想直接用了unset,测试了一下,没问题;但是多测试几个后就出现问题了,仔细检查后发现unset虽然删掉了指定键值的数组元素,但是这个函数返回的结果原来的兼职序列不变,而我要的是自动更新。
demo:
$arr=['aaaa','bbbb','cccc','dddd']; unset($arr[1]);
输出结果:
Array ( [0] => "aaaa" [2] => "cccc" [3] => "dddd" )
如果你想让数组重新排列,按照索引连续的排序,可以使用array_values函数。
array_values($arr);
这样你就会等到一个连续索引的数组了:
Array ( [0] => "aaaa" [1] => "cccc" [2] => "dddd" )
当然也可以使用array_splice函数(删除一个元素,不保持索引),一步达成,示例如下:
$arr=['aaaa','bbbb','cccc','dddd']; array_splice($arr,1,1);
上面示例代码中,array_splice第二个参数是必需的,是要删除元素的开始位置, 0表示第一个元素, 如果该值设置为正数,则从数组中该值指定的偏移量开始移除。如果该值设置为负数,则从数组末端倒数该值指定的偏移量开始移除。 -2 意味着从数组的倒数第二个元素开始。
结果:
Array ( [0] => "aaaa" [1] => "cccc" [2] => "dddd" )
array_diff()函数:按值删除多个元素,保持索引,与 unset 类似,array_diff 也将保持索引。
$arr = ['aaaa','bbbb','cccc','dddd']; $res = arrar_diff($arr,['aaaa','cccc']); var_dump($arr);
输出结果:
Array ( [1] => "bbbb" [3] => "dddd" )
array_diff_key() 函数用于比较两个(或更多个)数组的键名 ,并返回差集。 该函数比较两个(或更多个)数组的键名,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名。
$a1=array("a"=>"red","b"=>"green","c"=>"blue"); $a2=array("a"=>"red","c"=>"blue","d"=>"pink"); $result=array_diff_key($a1,$a2); print_r($result);
结果:Array ( [b] => green )
根据自己实际需要进行选择就是了。
本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:595397166@qq.com