是否可以在不知道索引的情况下从PHP数组中删除字符串(参见下面的示例)?
示例:
array = array("string1", "string2", "string3", "string4", "string5");
我需要删除string3。
答案 0 :(得分:29)
$index = array_search('string3',$array);
if($index !== FALSE){
unset($array[$index]);
}
如果您认为您的值将不止一次尝试使用带有搜索值的array_keys来获取所有索引。你可能想确定
编辑:
注意,使用unset
时索引保持不变。如果这是一个问题,那么有一个很好的答案here,它会说明如何使用array_splice
执行此操作。
答案 1 :(得分:5)
你可以这样做。
$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);
答案 2 :(得分:4)
使用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;
}
答案 3 :(得分:2)
这可能不是最快的方法,但它是一条简短而又整齐的代码:
if (data == arr[mid]) {
if (r - l == 0) {
return mid;
}
return binarySearch(arr, l, mid, data);
}
if(data < arr[mid])
return binarySearch(arr, l, mid-1, data);
return binarySearch(arr, mid+1, r, data);
或者如果您使用的是PHP&gt; 5.4.0或更高版本:
$array = array_diff($array, array("string3"))
答案 4 :(得分:2)
您也可以这样尝试。
$array = ["string1", "string2", "string3", "string4", "string5"];
$key = array_search('string3',$array);
unset($array[$key]);
答案 5 :(得分:1)
这取决于数组的大小,并且有多种选择。
如果它通常很小,array_diff可能是最快的一致解决方案,正如Jorge所说。
稍大一组的另一种解决方案:
$data = array_flip($data);
unset($data[$item2remove]);
$data = array_flip($data);
但是,如果你没有重复的项目,这是唯一的好处。根据您的工作量,保证项目的唯一性也可能是有利的。