Удалить строку из массива PHP? - PullRequest
17 голосов
/ 08 ноября 2010

Можно ли удалить строку (см. Пример ниже) из массива PHP, не зная индекса?

Пример:

array = array("string1", "string2", "string3", "string4", "string5");

Мне нужно удалить строку 3.

Ответы [ 6 ]

30 голосов
/ 08 ноября 2010
$index = array_search('string3',$array);
if($index !== FALSE){
    unset($array[$index]);
}

если вы думаете, что ваше значение будет там несколько раз, попробуйте использовать array_keys со значением поиска, чтобы получить все индексы. Вы, вероятно, захотите убедиться, что

EDIT:

Обратите внимание, что индексы остаются неизменными при использовании unset. Если это проблема, есть хороший ответ здесь , который показывает, как это сделать, используя array_splice.

5 голосов
/ 12 июня 2013

Вы можете сделать это.

$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); 
4 голосов
/ 19 сентября 2015

Используйте комбинацию 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;
}
2 голосов
/ 17 мая 2019

Вы также можете попробовать вот так.

$array = ["string1", "string2", "string3", "string4", "string5"];
$key = array_search('string3',$array);
unset($array[$key]);
1 голос
/ 10 июня 2016

Это, вероятно, не самый быстрый метод, но это короткая и аккуратная строка кода:

$array = array_diff($array, array("string3"))

или если вы используете PHP> 5.4.0 или выше:

$array = array_diff($array, ["string3"])
1 голос
/ 08 ноября 2010

Это в некоторой степени зависит от того, насколько большим будет массив, и есть несколько вариантов.

Если он, как правило, довольно маленький, array_diff, вероятно, является самым быстрым последовательным решением, как писал Хорхе.

Еще одно решение для немного больших наборов:

$data = array_flip($data);
unset($data[$item2remove]);
$data = array_flip($data);

Но это хорошо, только если у вас нет дубликатов.В зависимости от вашей рабочей нагрузки может быть также выгодно гарантировать уникальность предметов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...