如何找到一个数组中的值,并删除它使用 PHP 数组函数?

如何查找数组中是否存在值,然后删除它?删除后,我需要顺序索引顺序。

有没有 PHP 内置的数组函数来实现这一点?

158788 次浏览

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

一旦完成,使用 未设置()

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


unset( $array[array_search( 'orange', $array )] );
?>

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

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


print_r($hackers);


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


// array_seearch returns false if an element is not found
// so we need to do a strict check here to make sure
if ($pos !== false) {
echo 'Linus Trovalds found at: ' . $pos;


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


print_r($hackers);

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

首先,正如其他人提到的,你将使用“ Array _ search ()”和“ 未设置()”方法,如下所示:-

<?php
$arrayDummy = array( 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg' );
unset( $arrayDummy[array_search( 'dddd', $arrayDummy )] ); // Index 3 is getting unset here.
print_r( $arrayDummy ); // This will show the indexes as 0, 1, 2, 4, 5, 6.
?>

现在要重新索引同一个数组,而不对任何数组值排序,您将需要使用“ Array _ values ()”方法,如下所示:-

<?php
$arrayDummy = array_values( $arrayDummy );
print_r( $arrayDummy ); // Now, you will see the indexes as 0, 1, 2, 3, 4, 5.
?>

希望能有帮助。

如果您想使用任何提到的代码,请注意,当“干草堆”中没有找到“针”时,array_search返回 FALSE,因此这些示例将取消设置第一个(零索引)项。用这个代替:

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

上面的例子将输出:

Array
(
[0] => one
[1] => two
[2] => three
)

这很好!

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

要查找和删除数组中的多个 value 实例,我使用了下面的代码

$list = array(1,3,4,1,3,1,5,8);


$new_arr=array();


foreach($list as $value){


if($value=='1')
{
continue;
}
else
{
$new_arr[]=$value;
}
}




print_r($new_arr);

这个解决方案是@Peter 用于删除多个事件的解决方案和@chyno 用于删除第一个事件的解决方案的组合。我用的就是这个。

/**
* @param array $haystack
* @param mixed $value
* @param bool $only_first
* @return array
*/
function array_remove_values(array $haystack, $needle = null, $only_first = false)
{
if (!is_bool($only_first)) { throw new Exception("The parameter 'only_first' must have type boolean."); }
if (empty($haystack)) { return $haystack; }


if ($only_first) { // remove the first found value
if (($pos = array_search($needle, $haystack)) !== false) {
unset($haystack[$pos]);
}
} else { // remove all occurences of 'needle'
$haystack = array_diff($haystack, array($needle));
}


return $haystack;
}

在这里也可以看到: PHP 数组按值删除(不按键)

您可以使用 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');

如果你想重新索引数组,你可以像这样把结果传递给 array_values:

$output = array_values($output);

好吧,这是有点长,但是做了一些很酷的事情。

我试图过滤一个电子邮件列表,但排除某些域名和电子邮件。

下面的脚本将..。

  1. 删除具有特定域的任何记录
  2. 删除任何具有确切价值的电子邮件。

首先,您需要一个包含电子邮件列表的数组,然后您可以将某些域或个人电子邮件帐户添加到排除列表中。

然后,它将在最后输出一个干净记录列表。

//list of domains to exclude
$excluded_domains = array(
"domain1.com",
);


//list of emails to exclude
$excluded_emails = array(
"bob@domain2.com",
"joe@domain3.com",
);


function get_domain($email) {


$domain = explode("@", $email);
$domain = $domain[1];
return $domain;


}


//loop through list of emails
foreach($emails as $email) {


//set false flag
$exclude = false;


//extract the domain from the email
$domain = get_domain($email);


//check if the domain is in the exclude domains list
if(in_array($domain, $excluded_domains)){
$exclude = true;
}


//check if the domain is in the exclude emails list
if(in_array($email, $excluded_emails)){
$exclude = true;
}


//if its not excluded add it to the final array
if($exclude == false) {
$clean_email_list[] = $email;
}


$count = $count + 1;
}


print_r($clean_email_list);

unset array_search有一些非常可怕的副作用,因为它可能会意外地从你的数组中去掉第一个元素,而不管它的值是什么:

        // bad side effects
$a = [0,1,2,3,4,5];
unset($a[array_search(3, $a)]);
unset($a[array_search(6, $a)]);
$this->log_json($a);
// result: [1,2,4,5]
// what? where is 0?
// it was removed because false is interpreted as 0


// goodness
$b = [0,1,2,3,4,5];
$b = array_diff($b, [3,6]);
$this->log_json($b);
// result: [0,1,2,4,5]

如果您知道该值肯定在数组中,那么就使用它,但是我认为 array_diff更安全。(我正在使用 php7)

$data_arr = array('hello', 'developer', 'laravel' );




// We Have to remove Value "hello" from the array
// Check if the value is exists in the array


if (array_search('hello', $data_arr ) !== false) {
     

$key = array_search('hello', $data_arr );
     

unset( $data_arr[$key] );
}






# output:
// It will Return unsorted Indexed array
print( $data_arr )




// To Sort Array index use this
$data_arr = array_values( $data_arr );




// Now the array key is sorted