假设我有一个数组:
$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()
。通用程序,只需将$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);
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";
?>