-1

假设我有以下数组。我怎样才能删除“是”这个词
(索引可以是随机的,所以这样做unset($words[2])不是一种选择)

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

3 回答 3

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);

演示!

于 2013-08-10T23:08:34.183 回答
2

您可以使用array_search查找索引并使用 unset 将其删除

if (($index = array_search('are', $words)) !== false) {
unset($words[$index]);
}

array_search如果没有找到任何项目,则返回 false。

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

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

尽管这会使值为“are”的元素简单地消失。因此,在您的示例中,您的数组将不再包含索引 2。这可能会导致在索引迭代上工作的循环出现问题。要消除这一点,您可以使用array_values

$words = array_values($words);
于 2013-08-10T23:12:29.037 回答
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;.

于 2013-08-10T23:15:19.777 回答