说我有一个数组:
$before = array(1,2,3,3,4,4,4,5)
我如何只删除一个例如'3'?
$after = array(1,2,3,4,4,4,5)
(我不知道该数字在数组中的位置)
答案 0 :(得分:5)
您可以使用多种方法,具体取决于您的具体操作:
array_search()
然后unset()
找到索引。array_splice()
将其替换为空。array_filter()
与自定义回调一起使用。答案 1 :(得分:1)
通用例程,只需使用您希望减少为单例的值填充$ reduceValues数组。
$before = array(1,2,2,2,3,3,4,4,4,5,5);
$reduceValues = array(3,5);
$toReduce = array_fill_keys($reduceValues,TRUE);
$after = array_filter( $before,
function($data) use ($reduceValues,&$toReduce) {
if (in_array($data,$reduceValues)) {
if ($toReduce[$data]) {
$toReduce[$data] = FALSE;
return TRUE;
}
return FALSE;
}
return TRUE;
}
);
var_dump($after);
答案 2 :(得分:0)
这是您正在寻找的功能吗?
答案 3 :(得分:0)
如果您知道要删除的特定项目的顺序,可以使用类似
的内容 unset $before[2]
答案 4 :(得分:0)
有几种方法可以做你要求的。您应该使用哪一个取决于其使用的上下文,以及您想要的确切结果。我更喜欢array_splice(),因为它维护了数组编号。如果您想要最简单的方法,我建议unset()。如果您正在寻找消除欺骗的方法,请使用array_unique()。对于后两者,如果您需要按原样重新编号,请使用array_values()。如果您不知道需要删除的值的索引,可以将以上其中一个与array_search()结合使用。如果您需要更高级的过滤器,请使用array_filter()。
<?php
header('Content-Type: text/plain');
$original = array(1,2,3,3,4,4,4,5);
echo "ORIGINAL:\n";
print_r($original);
echo "\n\n";
echo "Using array_splice():\n";
$new = $original;
array_splice($new, 3, 1);
print_r($new);
echo "\n\n";
echo "Using array_unique() to remove dupes:\n";
$new = array_unique($original);
$new = array_values($new);
print_r($new);
echo "\n\n";
echo "Using unset:\n";
$new = $original;
unset($new[3]);
$new = array_values($new);
print_r($new);
echo "\n\n";
echo "Using array_search & unset:\n";
$new = $original;
unset($new[array_search('3', $new)]);
$new = array_values($new);
print_r($new);
echo "\n\n";
?>