3065 Stimmen

Löschen eines Elements aus einem Array in PHP

Gibt es eine einfache Möglichkeit, ein Element aus einem Array mit PHP zu löschen, so dass foreach ($array) dieses Element nicht mehr enthält?

Ich dachte, dass die Einstellung auf null würde es tun, aber offenbar funktioniert es nicht.

17 Stimmen

Ich würde nicht sagen, dass Konrads Antwort die einfachste auf das genannte Problem ist. Mit unset() werden die Iterationen über das Array den entfernten Wert nicht mehr enthalten. OTOH, es ist wahr, dass Stevan Antwort ist reichlich und, tatsächlich, war die Antwort, die ich gesucht habe - aber nicht die OP :)

48 Stimmen

@danip Dass es im Handbuch leicht zu finden ist, schließt eine Frage auf StackOverflow nicht aus. Wäre die Frage eine duplicado StackOverflow-Frage, dann gehört sie vielleicht nicht hierher. StackOverflow ist ein guter Ort, um Antworten zu finden, noch bevor Sie im Handbuch nachsehen.

7 Stimmen

@unset($array[$key]); $array = array_values($array);

16voto

Abdur Rehman Punkte 3108

Lösungen:

  1. Um ein Element zu löschen, verwenden Sie unset() :
unset($array[3]);
unset($array['foo']);
  1. Um mehrere nicht zusammenhängende Elemente zu löschen, verwenden Sie auch unset() :
unset($array[3], $array[5]);
unset($array['foo'], $array['bar']);
  1. Um mehrere zusammenhängende Elemente zu löschen, verwenden Sie array_splice() :
array_splice($array, $offset, $length);

Weitere Erklärung:

Wenn Sie diese Funktionen verwenden, werden alle Verweise auf diese Elemente aus PHP entfernt. Wenn Sie einen Schlüssel im Array behalten wollen, aber mit einem leeren Wert, weisen Sie dem Element den leeren String zu:

$array[3] = $array['foo'] = '';

Neben der Syntax gibt es einen logischen Unterschied zwischen der Verwendung von unset() und weist dem Element '' zu. Das erste sagt This doesn't exist anymore, während der zweite sagt This still exists, but its value is the empty string.

Wenn Sie mit Zahlen zu tun haben, ist die Zuweisung von 0 möglicherweise die bessere Alternative. Wenn also ein Unternehmen die Produktion des Kettenrads des Modells XL1000 einstellt, würde es seinen Bestand mit aktualisieren:

unset($products['XL1000']);

Wenn jedoch vorübergehend keine XL1000-Kettenräder mehr vorhanden sind, aber im Laufe der Woche eine neue Lieferung aus dem Werk erwartet wird, ist dies besser:

$products['XL1000'] = 0;

Wenn Sie unset() ein Element, passt PHP das Array so an, dass die Schleifenbildung weiterhin korrekt funktioniert. Es verdichtet das Array nicht, um die fehlenden Löcher zu füllen. Das ist es, was wir meinen, wenn wir sagen, dass alle Arrays assoziativ sind, auch wenn sie scheinbar numerisch sind. Hier ist ein Beispiel:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];  // Prints 'bee'
print $animals[2];  // Prints 'cat'
count($animals);    // Returns 6

// unset()
unset($animals[1]); // Removes element $animals[1] = 'bee'
print $animals[1];  // Prints '' and throws an E_NOTICE error
print $animals[2];  // Still prints 'cat'
count($animals);    // Returns 5, even though $array[5] is 'fox'

// Add a new element
$animals[ ] = 'gnu'; // Add a new element (not Unix)
print $animals[1];  // Prints '', still empty
print $animals[6];  // Prints 'gnu', this is where 'gnu' ended up
count($animals);    // Returns 6

// Assign ''
$animals[2] = '';   // Zero out value
print $animals[2];  // Prints ''
count($animals);    // Returns 6, count does not decrease

Um das Array in ein dicht gefülltes numerisches Array zu verdichten, verwenden Sie array_values() :

$animals = array_values($animals);

Alternativ dazu, array_splice() indexiert Arrays automatisch neu, um Löcher zu vermeiden:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);
Array
(
    [0] => ant
    [1] => bee
    [2] => elk
    [3] => fox
)

Dies ist nützlich, wenn Sie das Array als Warteschlange verwenden und Elemente aus der Warteschlange entfernen möchten, während Sie weiterhin einen zufälligen Zugriff erlauben. Um das erste oder letzte Element aus einem Array sicher zu entfernen, verwenden Sie array_shift() y array_pop() .

14voto

msvairam Punkte 834

Befolgen Sie die Standardfunktionen:

  • PHP: nicht eingestellt

unset() vernichtet die angegebenen Variablen. Für weitere Informationen können Sie nachlesen PHP nicht eingestellt

$Array = array("test1", "test2", "test3", "test3");

unset($Array[2]);
  • PHP: array_pop

El array_pop() Funktion löscht das letzte Element eines Arrays. Für weitere Informationen können Sie sich auf PHP array_pop

$Array = array("test1", "test2", "test3", "test3");

array_pop($Array);
  • PHP: array_splice

El array_splice() Funktion entfernt ausgewählte Elemente aus einem Array und ersetzt sie durch neue Elemente. Für weitere Informationen können Sie sich auf PHP array_splice

$Array = array("test1", "test2", "test3", "test3");

array_splice($Array,1,2);
  • PHP: array_shift

El array_shift() Funktion entfernt das erste Element aus einem Array. Für weitere Informationen können Sie sich auf PHP array_shift

$Array = array("test1", "test2", "test3", "test3");

array_shift($Array);

11voto

Oxydel Punkte 166

Ich möchte nur sagen, dass ich ein bestimmtes Objekt mit variablen Attributen hatte (es wurde im Grunde eine Tabelle abgebildet und ich änderte die Spalten in der Tabelle, so dass die Attribute im Objekt, die die Tabelle widerspiegeln, ebenfalls variierten):

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){}
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]);
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

Der ganze Zweck der $fields war nur, damit ich nicht überall im Code nachsehen muss, wenn sie geändert werden, ich schaue nur am Anfang der Klasse und ändere die Liste der Attribute und die $Felder Array-Inhalt, um die neuen Attribute wiederzugeben.

10voto

Nabi K.A.Z. Punkte 8144

Zwei Möglichkeiten, um das erste Element eines Arrays zu entfernen, wobei die Reihenfolge der Indizes beibehalten wird und auch, wenn Sie den Schlüsselnamen des ersten Elements nicht kennen.

Lösung #1

// 1 is the index of the first object to get
// NULL to get everything until the end
// true to preserve keys
$array = array_slice($array, 1, null, true);

Lösung #2

// Rewinds the array's internal pointer to the first element
// and returns the value of the first array element.
$value = reset($array);
// Returns the index element of the current array position
$key = key($array);
unset($array[$key]);

Für diese Beispieldaten:

$array = array(10 => "a", 20 => "b", 30 => "c");

Sie müssen dieses Ergebnis haben:

array(2) {
  [20]=>
  string(1) "b"
  [30]=>
  string(1) "c"
}

9voto

Tebe Punkte 3045

Angenommen, Sie haben das folgende Array:

Array
(
    [user_id] => 193
    [storage] => 5
)

Zum Löschen storage , tun:

unset($attributes['storage']);
$attributes = array_filter($attributes);

Und Sie bekommen:

Array
(
    [user_id] => 193
)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X