假设我有以下数组。如何删除“是”一词
(索引可以是随机的,因此unset($words[2])
不是一个选项)
$words= array("hi", "how", "are", "you", "doing");
//array_remove("are", $words); <== How to do this in php?
答案 0 :(得分:6)
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);
答案 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;
的行。