Удалить строку из массива PHP?
Можно ли удалить строку (см. пример ниже) из массива PHP, не зная индекса?
Пример:
array = array("string1", "string2", "string3", "string4", "string5");
Мне нужно удалить string3.
Ответы
Ответ 1
$index = array_search('string3',$array);
if($index !== FALSE){
unset($array[$index]);
}
если вы думаете, что ваше значение будет там несколько раз, попробуйте использовать array_keys со значением поиска, чтобы получить все индексы. Вы, вероятно, захотите убедиться
РЕДАКТИРОВАТЬ:
Обратите внимание, что индексы остаются неизменными при использовании unset
. Если это вопрос, есть хороший ответ здесь, что показывает, как это сделать с помощью array_splice
.
Ответ 2
Вы можете сделать это.
$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);
Ответ 3
Используйте комбинацию 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;
}
Ответ 4
Это, вероятно, не самый быстрый способ, но это короткая и аккуратная одна строка кода:
$array = array_diff($array, array("string3"))
или если вы используете PHP > 5.4.0 или выше:
$array = array_diff($array, ["string3"])
Ответ 5
Это зависит от того, насколько велик массив, и есть несколько вариантов.
Если это типично довольно мало, array_diff, скорее всего, является самым быстрым последовательным решением, как опубликовал Хорхе.
Другое решение для немного больших наборов:
$data = array_flip($data);
unset($data[$item2remove]);
$data = array_flip($data);
Но это только хорошо, если у вас нет дубликатов. В зависимости от вашей рабочей нагрузки может быть полезно гарантировать уникальность элементов.
Ответ 6
Вы также можете попробовать вот так.
$array = ["string1", "string2", "string3", "string4", "string5"];
$key = array_search('string3',$array);
unset($array[$key]);