使用PHP从数组中删除项目

5
我有两个数组。
$alpha=array('a','b','c','d','e','f');

$index=array('2','5');

我需要从第一个数组中删除索引存在于第二个数组中的项。

(删除c索引为2和f索引为5)

因此返回的数组将是

{'a','b','d','e'}

我该如何使用PHP实现这一点?谢谢。

编辑

实际上,我需要最终的数组如下

[0]=>a
[1]=>b
[2]=>d
[3]=>e

取消设置将返回具有相同索引的数组

0 => string 'a' 
2 => string 'c' 
3 => string 'd' 
4 => string 'e' 

1
如果你只为了Karma而来,那就放下自我。要帮助社区,而不是单纯的用户。 - Matt
@Matt 当有人解决了你的问题时,表达感激之情是很好的。这并不是必须的,但是很好。如果一个用户不在乎或者不知道社区的运作方式,那么这个用户对社区没有任何价值。此外,我也不是在告诉他要接受我的答案(我甚至没有答案)或者其他什么。 - sachleen
5个回答

3
foreach ($index as $key) {
    unset($alpha[$key]);
}

之前叫做array_unset()。


2
array_unset 必须是一个尚未创建的新函数... - Brad Christie
给我一个错误致命错误:调用未定义的函数array_unset() - Rav
抱歉,我更正了答案。应该是unset()而不是array_unset()。 - Matt
请使用unset($alpha[$key])代替array_unset()。 - Shahid Ahmed
我不同意 - 他可以将这段代码用于包含任意数量索引的任何数组。不要做一个懒惰的程序员。 - Matt
1
最佳代码是:var_dump(array_diff_key($alpha, array_flip($index))); - FabianoLothor

3

请尝试以下方法以提高性能:

var_dump(array_diff_key($alpha, array_flip($index)));

2

另一种方法(如果 $alpha$index 很大,您想要全部在 php 中保留):

function remove_keys($array, $indexes = array()){
  return array_intersect_key($array, array_diff(array_keys($array),$indexes));
}

IDEOne 示例


1

通过循环遍历您的$index数组中的键,并在迭代过程中使用unset()删除相应的键:

<?php
$alpha=array('a','b','c','d','e','f');  
$index=array('2','5'); 

foreach ($index as $key) {     
    unset($alpha[$key]);
} 

var_dump($alpha);
?>

输出:

array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [3]=> string(1) "d" [4]=> string(1) "e" } 

0

请检查:

$array = array('a', 'b','c');
unset($array[0]);
$array = array_values($array); //reindexing

1
这只会取消数组索引0处的值。它不会移动数组中的任何内容,你只会得到array(2) { [1]=> string(1) "b" [2]=> string(1) "c" }。 - Matt

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