2009-11-17 4 views

Antwort

8

Das hängt davon ab:

$a1 = array('a' => 1, 'b' => 2, 'c' => 3); 
unset($a1['b']); 
// array('a' => 1, 'c' => 3) 

$a2 = array(1, 2, 3); 
unset($a2[1]); 
// array(0 => 1, 2 => 3) 
// note the missing index 1 

// solution 1 for numeric arrays 
$a3 = array(1, 2, 3); 
array_splice($a3, 1, 1); 
// array(0 => 1, 1 => 3) 
// index is now continous 

// solution 2 for numeric arrays 
$a4 = array(1, 2, 3); 
unset($a4[1]); 
$a4 = array_values($a4); 
// array(0 => 1, 1 => 3) 
// index is now continous 

Allgemeinen unset() für Hashtables sicher ist (string-indizierte Arrays), aber wenn man auf kontinuierliche numerische Indizes verlassen werden Sie verwenden, um entweder array_splice() oder eine Kombination aus unset() und array_values().

+1

Warum würden Sie unset kombiniert mit array_values ​​anstelle von array_splice verwenden? – John

+4

@ John: Ein Szenario, über das ich nachdenken kann, ist, wenn Sie mehrere Elemente aus einem Array entfernen möchten. Mit dem 'unset()' - Weg können Sie die Werte entfernen, ohne über das Ändern von Schlüsseln nachdenken zu müssen - wenn Sie fertig sind, führen Sie das Array durch 'array_values ​​()' aus, um die Indizierung zu normalisieren. Das ist sauberer und schneller als die Verwendung von 'array_splice()' mehrmals. –

9

der gemeinsame Weg:

Nach der manual

unset($arr[5]); // This removes the element from the array 

Die gefilterten Weise:

Es besteht auch die array_filter() Funktion Pflege von Filteranordnungen aufzunehmen

$numeric_data = array_filter($data, "is_numeric"); 

Um ein sequentieller Index erhalten Sie

$numeric_data = array_values($numeric_data); 

Referenzen
PHP – Delete selected items from an array

+0

Peter, danke. – lovespring

5

Es hängt davon nutzen können. Wenn Sie wollen, um ein Element zu entfernen, ohne dass Lücken in dem Indizes, müssen Sie array_splice verwenden:

$a = array('a','b','c', 'd'); 
array_splice($a, 2, 1); 
var_dump($a); 

Ausgang:

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [2]=> 
    string(1) "d" 
} 

ungesetzt Verwendung kann funktionieren, aber dies führt zu einem nicht-kontinuierlichen Index. Dies kann manchmal ein Problem sein, wenn Sie über das Array mit count ($ a) iterieren - 1 als Maß für die obere Grenze:

$a = array('a','b','c', 'd'); 
unset($a[2]); 
var_dump($a); 

Ausgang:

array(3) { 
    [0]=> 
    string(1) "a" 
    [1]=> 
    string(1) "b" 
    [3]=> 
    string(1) "d" 
} 

Wie Sie sehen, count jetzt 3, aber der Index des letzten Elements ist auch 3.

Meine Empfehlung ist daher, array_splice für Arrays mit numerischen Indizes zu verwenden, und verwenden Sie nur für Arrays (Wörterbücher wirklich) mit nicht-numerischen Indizes deaktiviert.

+0

alternativ könnten Sie 'unset ($ a [2]) aufrufen; $ a = array_values ​​($ a); ' – nickf

Verwandte Themen