如何在数组中查找值并使用PHP数组函数将其删除

DEV*_*OPS 53 php arrays function built-in

如何查找数组中存在的值以及如何删除它.如果任何php内置数组用于执行此操作.删除后我需要顺序索引顺序.任何身体都知道请帮助我.

Pet*_*ter 95

<?php
$my_array = array('sheldon', 'leonard', 'howard', 'penny');
$to_remove = array('howard');
$result = array_diff($my_array, $to_remove);
?>
Run Code Online (Sandbox Code Playgroud)

  • 可以删除多个值而无需循环! (7认同)
  • 这个解决方案对我来说更干净。但是,请注意它保留索引,因此如果您想按数字顺序重新排列它们,您需要这样做:**array_values(array_diff($my_array, $to_remove))** (4认同)
  • +1避免了检查array_search的返回值的乏味 (2认同)
  • 似乎更有效,如果您使用通配符搜索来删除元素,则可以使用array_search或preg_grep函数创建数组$ to_remove. (2认同)

moh*_*oni 93

要搜索数组中的元素,可以使用array_search函数并从可以使用unset函数的数组中删除元素.例如:

<?php
$hackers = array ('Alan Kay', 'Peter Norvig', 'Linus Trovalds', 'Larry Page');

print_r($hackers);

// Search
$pos = array_search('Linus Trovalds', $hackers);

echo 'Linus Trovalds found at: ' . $pos;

// Remove from array
unset($hackers[$pos]);

print_r($hackers);
Run Code Online (Sandbox Code Playgroud)

您可以参考:http://www.php.net/manual/en/ref.array.php获取更多与数组相关的函数.

  • 但是如果array_search因为没有找到而返回`false`,那么第一个数组值将被删除. (12认同)
  • 您可以通过`if(pos === false)`测试是否没有匹配 (4认同)
  • 另请注意,`unset()`会将数组转换为关联数组.要把它变回一个数组(没有键),使用[`array_values()`](http://php.net/manual/en/function.array-values.php) (2认同)
  • @mohitsoni 嗨,mohitsoni,您会考虑在执行 `unset` 之前更新代码并检查条件 `if ($pos !== false)` 吗?原因是如果 `Linus Trovalds` 不存在,你的代码将删除 `Alan Kay`。 (2认同)

Ker*_*nes 14

您需要先找到数组的键,这可以使用array_search()来完成

完成后,使用unset()

<?php
$array = array( 'apple', 'orange', 'pear' );

unset( $array[array_search( 'orange', $array )] );
?>
Run Code Online (Sandbox Code Playgroud)

  • @learner http://de3.php.net/manual/en/function.array-search.php 中缺少 haystack 参数 - 该手册是你的朋友。 (2认同)

chy*_*yno 8

如果你想使用任何提到的代码,请注意array_search当在"haystack"中找不到"needle"时返回FALSE,因此这些样本将取消设置第一个(零索引)项.请改用:

<?php
$haystack = Array('one', 'two', 'three');
if (($key = array_search('four', $haystack)) !== FALSE) {
  unset($haystack[$key]);
}
var_dump($haystack);
Run Code Online (Sandbox Code Playgroud)

上面的例子将输出:

Array
(
    [0] => one
    [1] => two
    [2] => three
)
Run Code Online (Sandbox Code Playgroud)

这很好!


Kod*_*son 5

您可以用来array_filter根据回调函数过滤掉数组的元素。回调函数将数组的每个元素作为参数,false如果该元素应被删除,则只需返回即可。这还具有删除重复值的好处,因为它会扫描整个数组。

您可以像这样使用它:

$myArray = array('apple', 'orange', 'banana', 'plum', 'banana');
$output = array_filter($myArray, function($value) { return $value !== 'banana'; });
// content of $output after previous line:
// $output = array('apple', 'orange', 'plum');
Run Code Online (Sandbox Code Playgroud)

如果要重新索引数组,则可以将结果传递给array_values这样:

$output = array_values($output);
Run Code Online (Sandbox Code Playgroud)