PHP: 如何从数组中删除特定元素?

当我知道元素的值时,如何从数组中删除元素? 例如:

我有一个数组:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');

用户输入 strawberry

$array移除 strawberry

详细解释:

我有一个数据库,它存储一个由逗号分隔的项目列表。代码根据用户选择所在的位置拉入列表。因此,如果他们选择草莓,他们的代码拉每一个条目是草莓的位置,然后转换为一个数组使用 split ()。我希望他们删除用户选择的项目,例如草莓,从数组。

552399 次浏览
if (in_array('strawberry', $array))
{
unset($array[array_search('strawberry',$array)]);
}

一个更好的方法可能是将值作为键保存在一个关联数组中,然后在需要实际数组时调用它的 array_keys()。这样就不需要使用 array_search来找到元素。

使用 array_search获取密钥,如果找到,则用 unset移除密钥:

if (($key = array_search('strawberry', $array)) !== false) {
unset($array[$key]);
}

如果没有找到任何项目,则 array_search返回 假的(无效直到 PHP 4.2.0)。

如果可以有多个具有相同值的项,则可以使用 array_keys获取所有项的键:

foreach (array_keys($array, 'strawberry') as $key) {
unset($array[$key]);
}

会是这样的:

 function rmv_val($var)
{
return(!($var == 'strawberry'));
}


$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');


$array_res = array_filter($array, "rmv_val");

使用 array_seach(),尝试以下操作:

if(($key = array_search($del_val, $messages)) !== false) {
unset($messages[$key]);
}

array_search()返回它找到的元素的键,该键可以用来使用 unset()从原始数组中删除该元素。它在失败时返回 FALSE,但是在成功时返回“ false”值(例如,键可能是 0) ,这就是为什么要使用严格的比较 !==操作符。

if()语句将检查 array_search()是否返回值,并且只在返回值时执行操作。

可以使用数组过滤器根据 $v上的特定条件删除项:

$arr = array_filter($arr, function($v){
return $v != 'some_value';
});
unset($array[array_search('strawberry', $array)]);

使用 array_diff()为1行解决方案:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string
$array_without_strawberries = array_diff($array, array('strawberry'));
print_r($array_without_strawberries);

... 不需要额外的函数或 foreach 循环。

我更喜欢使用 Array _ key _ vis来搜索数组中的键,比如:

Array([0]=>'A',[1]=>'B',['key'=>'value'])

因为 array _ search 和 in _ array ()在这里不起作用,所以可以有效地查找指定的内容。

我觉得这对某人有帮助。

$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
function remove_embpty($values)
{
if($values=='orange')
{
$values='any name';
}
return $values;
}
$detils=array_map('remove_embpty',$detils);
print_r($detils);

如果您在这里使用的是一个普通数组(看起来就是这种情况) ,那么您应该使用以下代码:

if (($key = array_search('strawberry', $array)) !== false) {
array_splice($array, $key, 1);
}

unset($array[$key])只删除元素,但不重新排序普通数组。

假设我们有一个数组并使用 array _ splice:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
array_splice($array, 2, 1);
json_encode($array);
// yields the array ['apple', 'orange', 'blueberry', 'kiwi']

与未设置相比:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[2]);
json_encode($array);
// yields an object {"0": "apple", "1": "orange", "3": "blueberry", "4": "kiwi"}

注意,unset($array[$key])不重新排序数组。

我现在正在使用这个函数:

function array_delete($del_val, $array) {
if(is_array($del_val)) {
foreach ($del_val as $del_key => $del_value) {
foreach ($array as $key => $value){
if ($value == $del_value) {
unset($array[$key]);
}
}
}
} else {
foreach ($array as $key => $value){
if ($value == $del_val) {
unset($array[$key]);
}
}
}
return array_values($array);
}

您可以输入一个数组,也可以只输入一个包含应该删除的元素的字符串。 这样写:

$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$detils = array_delete(array('orange', 'apple'), $detils);

或者

$detils = array_delete('orange', $detils);

它还会重新索引。

这是一个简单的重复,可以删除数组中的多个值。

    // Your array
$list = array("apple", "orange", "strawberry", "lemon", "banana");


// Initilize what to delete
$delete_val = array("orange", "lemon", "banana");


// Search for the array key and unset
foreach($delete_val as $key){
$keyToDelete = array_search($key, $list);
unset($list[$keyToDelete]);
}

创建具有删除特定 Array 值的数值数组

    <?php
// create a "numeric" array
$animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive');


//Normarl display
print_r($animals);
echo "<br/><br/>";


//If splice the array
//array_splice($animals, 2, 2);
unset($animals[3]); // you can unset the particular value
print_r($animals);


?>

你可以参考这个链接. 。

$remove= "strawberry";
$array = ["apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
if ($value!=$remove) {
echo $value.'<br/>';
continue;
}
}
<?php
$array = array("apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>

这个问题有几个答案,但我想添加更多的东西,因为当我使用 unsetarray_diff时,我有几个问题与新数组的索引时,特定的元素被删除(因为初始索引被保存)

我又回到了那个例子:

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_without_strawberries = array_diff($array, array('strawberry'));

或者

$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
unset($array[array_search('strawberry', $array)]);

如果您打印结果,您将获得:

foreach ($array_without_strawberries as $data) {
print_r($data);
}

结果:

> apple
> orange
> blueberry
> kiwi

但是索引会被保存,所以你可以访问你的元素,比如:

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[3] > blueberry
$array_without_strawberries[4] > kiwi

所以最终的数组不会被重新索引,所以你需要在 unset或者 array_diff后面加上:

$array_without_strawberries = array_values($array);

在这之后,你的数组将会有一个普通的索引:

$array_without_strawberries[0] > apple
$array_without_strawberries[1] > orange
$array_without_strawberries[2] > blueberry
$array_without_strawberries[3] > kiwi

相关文章: 重新索引数组

enter image description here

希望能有所帮助

我正在寻找同一个问题的答案,碰巧遇到了这个话题。我认为主要有两种方式: array_searchunset的结合和 array_diff的使用。乍一看,第一个方法似乎更快,因为不需要创建额外的数组(如使用 array_diff时)。但我写了一个小的基准,并确保第二个方法不仅更简洁,而且更快!很高兴和你分享这个。:)

Https://glot.io/snippets/f6ow6biaol

您可以使用一行代码来完成此操作,该行代码将从数组中删除元素。

$array = array_diff($array,['strawberry']);
foreach ($get_dept as $key5 => $dept_value) {
if ($request->role_id == 5 || $request->role_id == 6){
array_splice($get_dept, $key5, 1);
}
}

用这个简单的方法希望对你有帮助

foreach($array as $k => $value)
{
      

if($value == 'strawberry')
{
unset($array[$k]);
}
}