Можно ли удалить строку (см. Пример ниже) из массива 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 со значением поиска, чтобы получить все индексы. Вы, вероятно, хотите, чтобы убедиться, что
EDIT:
отметить, что индексы остаются неизменными при использовании unset
. Если это проблема, есть хороший ответ here, который показывает, как это сделать, используя array_splice
.
Это зависит от того, насколько велик массив, и есть несколько вариантов.
Если это типично довольно мало, 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"])
Я проверил ваш метод против GWW в цикле for, который работает 2,5 миллиона раз. Вы закончили через 18 секунд (17 секунд, когда я не использовал переменные), тогда как GWW завершился за 16 секунд. Таким образом, 'array_diff' работает медленнее, чем транзакция с массивом, а не с одной строкой, что приводит к накладным расходам. Если бы существовала функция типа 'array_diff', но для удаления одной строки в массиве. – FluorescentGreen5
Мне нравится это +1 для вас. Но как я могу подтвердить, что он был удален (отображается на экране)? –
Проверьте функции php print_r и var_dump. Вы можете использовать их для сброса содержимого вашего массива. – GWW
Обратите внимание, что использование unset() будет поддерживать индексы нетронутыми: http://stackoverflow.com/a/369761/176140 – schellmax