2015-12-21 2 views
0

Я пытаюсь удалить определенный элемент из php-массива с помощью функции unset. Проблема заключается в том, что когда я var_dump массив, он показывает все индексы (не хорошо), но если я пытаюсь var_dump конкретного индекса, PHP генерирует предупреждение (хорошо).Как удалить элемент из неассоциативного массива в php

$a = [ 
    'unset_me', 
    'leave_me', 
    'whatever', 
]; 

unset($a['unset_me']); 

var_dump($a); 
/** 
array(3) { 
    [0]=> 
    string(8) "unset_me" 
    [1]=> 
    string(8) "leave_me" 
    [2]=> 
    string(8) "whatever 
*/ 
var_dump($a['unset_me']); // Undefined index: unset_me 

Вопрос: почему php ведет себя так и как правильно удалить индекс?

+2

'unset ($ a [0]);' - массив имеет числовые индексы, нет элемента со строковым индексом 'unset_me' – Steve

ответ

3

Вы можете попробовать это с array_search -

unset($a[array_search('unset_me', $a)]); 

При необходимости добавьте чеки, как -

if(array_search('unset_me', $a) !== false) { 
    unset($a[array_search('unset_me', $a)]); 
} 

Demo

+0

Это опасно: http://codepad.viper-7.com/Kb92l7 – Steve

+1

Хорошо, неважно! Редактирование важно – Steve

+0

@Steve, если проверки были добавлены правильно, все будет хорошо. Вы можете проверить обновление. Я уже говорил об этом. Это происходит потому, что 'array_search' возвращает' false' и 'false' считается' 0'. :) –

3

еще одно решение:

$arr = array('unset_me','leave_me','whatever',); 
print_r($arr); 

// remove the elements that you want 
$arr = array_diff($arr, array("unset_me")); 
print_r($arr); 
+1

Good1 !! Нет необходимости в проверке !!! –

+1

Это лучше, чем что-либо, связанное с 'array_search'. Упрощение, меньше точек отказа и менее разрушительное для структуры массива. – ptmalcolm

1
$arr = array('unset_me','leave_me','whatever',); 
print_r($arr); 
echo '<br/>'; 

$key = array_search('unset_me', $arr); 
if($key !== false) 
unset($arr[$key]); 

print_r($arr);