php从数组中删除一项

时间:2012-03-23 19:24:43

标签: php arrays

说我有一个数组:

$before = array(1,2,3,3,4,4,4,5)

我如何只删除一个例如'3'?

$after = array(1,2,3,4,4,4,5)

(我不知道该数字在数组中的位置)

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)

这是您正在寻找的功能吗?

http://php.net/manual/en/function.array-filter.php

答案 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";
?>