Удалить строку из массива 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]);