假设我有一个数组:
$before = array(1,2,3,3,4,4,4,5)
我该如何删除一个出现的例如"3"?
$after = array(1,2,3,4,4,4,5)
(我不知道这个数字在数组中的什么位置)
您可以使用各种方法,具体取决于您要做的事情:
- 使用
array_search()
和unset()
查找索引 - 如果知道索引,请使用
array_splice()
将其替换为零 - 将
array_filter()
与自定义回调一起使用
Generic例程,只需用要还原为singleton的值填充$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);
这就是您想要的功能吗?
http://php.net/manual/en/function.array-filter.php
如果您知道要删除的特定项目的顺序,您可以使用类似的东西
unset $before[2]
有几种方法可以满足您的要求。你应该使用哪一个取决于它的使用上下文,以及你想要的确切结果。我更喜欢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";
?>