是否可以在不知道索引的情况下从PHP数组中删除字符串(请参阅下面的示例)?从PHP数组中删除字符串?
实施例:
array = array("string1", "string2", "string3", "string4", "string5");
我需要删除STRING3。
是否可以在不知道索引的情况下从PHP数组中删除字符串(请参阅下面的示例)?从PHP数组中删除字符串?
实施例:
array = array("string1", "string2", "string3", "string4", "string5");
我需要删除STRING3。
$index = array_search('string3',$array);
if($index !== FALSE){
unset($array[$index]);
}
,如果你认为你的价值会在那里不止一次尝试使用array_keys与搜索值获取所有的索引。你可能会想确保
编辑:
注意,该指标使用unset
时保持不变。如果这是一个问题,有一个很好的答案here,显示如何使用array_splice
来做到这一点。
它的类型取决于数组可能有多大,并且有多个选项。如Jorge所发布的,array_diff可能是最快一致的解决方案。
稍微大套的另一个解决方案:
$data = array_flip($data);
unset($data[$item2remove]);
$data = array_flip($data);
但是,如果你没有重复的项目,这只是良好。根据你的工作量,保证物品的独特性也许是有利的。
你可以这样做。
$arr = array("string1", "string2", "string3", "string4", "string5");
$new_arr=array();
foreach($arr as $value)
{
if($value=="string3")
{
continue;
}
else
{
$new_arr[]=$value;
}
}
print_r($new_arr);
使用array_search
和array_splice
的组合。
function array_remove(&$array, $item){
$index = array_search($item, $array);
if($index === false)
return false;
array_splice($array, $index, 1);
return true;
}
这可能不是最快的方法,但它的代码短而整齐的一行:
$array = array_diff($array, array("string3"))
,或者如果你正在使用PHP> 5.4.0或更高版本:
$array = array_diff($array, ["string3"])
我bench-marked你的GWW的方法在for循环运行250万次。你的完成在18秒(17秒,当我没有使用变量),而GWW的在16秒内完成。所以'array_diff'处理数组而不是单个字符串会更慢,从而导致开销。 如果只有像'array_diff'这样的函数,但用于删除数组中的单个字符串。 – FluorescentGreen5 2017-03-12 07:19:55
我喜欢这个+1给你。但是,如何确认它已被删除(在屏幕上显示)? – 2010-11-08 01:38:42
查看php函数print_r和var_dump。您可以使用它们来转储数组的内容。 – GWW 2010-11-08 01:39:44
请注意,使用unset()将保持索引不变:http://sackoverflow.com/a/369761/176140 – schellmax 2013-07-24 14:15:47