2010-11-08 3 views

ответ

23
$index = array_search('string3',$array); 
if($index !== FALSE){ 
    unset($array[$index]); 
} 

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

EDIT:

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

+0

Мне нравится это +1 для вас. Но как я могу подтвердить, что он был удален (отображается на экране)? –

+0

Проверьте функции php print_r и var_dump. Вы можете использовать их для сброса содержимого вашего массива. – GWW

+0

Обратите внимание, что использование unset() будет поддерживать индексы нетронутыми: http://stackoverflow.com/a/369761/176140 – schellmax

1

Это зависит от того, насколько велик массив, и есть несколько вариантов.

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

Другое решение несколько больших наборов:

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

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

4

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

$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; 
} 
2

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

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

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

$array = array_diff($array, ["string3"]) 
+1

Я проверил ваш метод против GWW в цикле for, который работает 2,5 миллиона раз. Вы закончили через 18 секунд (17 секунд, когда я не использовал переменные), тогда как GWW завершился за 16 секунд. Таким образом, 'array_diff' работает медленнее, чем транзакция с массивом, а не с одной строкой, что приводит к накладным расходам. Если бы существовала функция типа 'array_diff', но для удаления одной строки в массиве. – FluorescentGreen5

Смежные вопросы