php从数组中删除一项


php remove one item from array

假设我有一个数组:

$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";
?>