从非关联数组中删除元素

时间:2013-08-10 23:05:52

标签: php arrays

假设我有以下数组。如何删除“是”一词
(索引可以是随机的,因此unset($words[2])不是一个选项)

$words= array("hi", "how", "are", "you", "doing");
//array_remove("are", $words); <== How to do this in php?

3 个答案:

答案 0 :(得分:6)

使用array_search()

function array_remove($word, &$array) 
{
    if (($key = array_search('are', $array)) !== false) {
        unset($array[$key]);
    }
}

用法:

$words = array("hi", "how", "are", "you", "doing");
array_remove('are', $words);

Demo!

答案 1 :(得分:2)

您可以使用array_search查找索引并使用取消设置

将其删除
if (($index = array_search('are', $words)) !== false) {
unset($words[$index]);
}
如果没有找到任何项目,

array_search将返回false。

如果你想删除多个“是”的实例,你可以尝试array_keys

foreach(array_keys($words,"are") as $index) {
unset($words[$index])
}

虽然这会使值为“are”的元素消失。所以在你的例子中,你的数组将不再包含索引2.这可能会导致索引迭代的循环出现问题。为了解决这个问题,您可以使用array_values

$words = array_values($words);

答案 2 :(得分:1)

如果您想要一个功能,这完全符合您的评论:

function array_remove($needle, & $haystack) {
    foreach ($haystack as $key => $value) {
        if ($value === $needle) {
            unset($haystack[$key]);
            break;
        }
    }
}
$words= array("hi", "how", "are", "you", "doing");
array_remove('are', $words);
echo '<pre>'; print_r($words);

如果您希望该功能删除$needle的所有实例,请删除显示break;的行。