不知道数组索引的情况下,是否有可能从PHP数组中删除一个字符串(请参见以下示例)?
示例:
array = array("string1", "string2", "string3", "string4", "string5");
我需要移除string3。
$index = array_search('string3',$array);
if($index !== FALSE){
unset($array[$index]);
}
如果你认为你的值会在数组中出现多次,尝试使用array_keys和搜索值一起获取所有的索引。你可能想要确保unset
时索引保持不变。如果这是一个问题,可以查看 这里 的一个不错的答案,该答案显示如何使用array_splice
来解决这个问题。$array = array_diff($array, array("string3"))
如果您使用的是 PHP > 5.4.0 或更高版本:
$array = array_diff($array, ["string3"])
array_diff
处理数组而不是单个字符串,会产生额外的开销,所以速度较慢。如果有一个像 array_diff
但是用于从数组中移除单个字符串的函数就好了。 - FluorescentGreen5你可以做到这一点。
$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 = ["string1", "string2", "string3", "string4", "string5"];
$key = array_search('string3',$array);
unset($array[$key]);
这有点取决于数组的大小,有多种选择。
如果数组通常很小,array_diff可能是最快的一致解决方案,就像Jorge发布的那样。
稍大一点集合的另一种解决方案:
$data = array_flip($data);
unset($data[$item2remove]);
$data = array_flip($data);
但仅当您没有重复项时,这才是好的。根据您的工作负载,确保项目的唯一性可能是有利的。
array_values
比array_splice
更容易使用,用于清理索引。 - FluorescentGreen5if($index)
而不是if($index !== FALSE)
,这样看起来更干净,而且仍然有效。编辑:算了,如果要删除的字符串在索引0上,则它将无效。 - FluorescentGreen5