PHP如何从数组中移除一个元素?

4

假设我有一个数组:

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

我该如何仅删除一个 '3' 的出现?
$after = array(1,2,3,4,4,4,5)

我不知道那个数字会在数组的哪个位置。

1
请将以下有关编程的内容从英语翻译成中文。仅返回已翻译的文本:如果您需要针对此案例的特定答案,则与一般情况不同。 - hjpotter92
5个回答

5

您可以根据需要使用多种方法:

  • 使用array_search()找到索引,然后使用unset()删除它。
  • 如果您知道索引,请使用array_splice()将其替换为空。
  • 使用带有自定义回调函数的array_filter()

1
例如:unset($before[array_search(3,$before)]);。从数组中删除第一个出现的3。 - Mark Biek

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);

@salathe - 然后我只是在考虑一种更通用的版本,可以将多个“目标”缩减为一个条目。 - Mark Baker

0
如果您知道要删除的特定项目的顺序,可以使用类似以下的内容:
 unset $before[2]

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接