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.
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.
Lösungen:
unset($array[3]); unset($array['foo']);
unset($array[3], $array[5]); unset($array['foo'], $array['bar']);
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() .
Befolgen Sie die Standardfunktionen:
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]);
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);
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);
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);
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.
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.
// 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);
// 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"
}
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.
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);
0 Stimmen
Verwandte Frage über das Entfernen dieser in einer foreach-Schleife: stackoverflow.com/questions/1949259/
2 Stimmen
Wenn Sie Schlüssel aus einem Array eines Arrays (assoziatives Array) entfernen möchten, finden Sie die Lösung unter stackoverflow.com/a/47978980/1045444
2 Stimmen
Können Sie dies in einer foreach-Schleife wie folgt tun: pastefs.com/pid/130950
3 Stimmen
Das Setzen eines Array-Schlüsselwerts auf null bedeutet einfach, dass ein Schlüssel mit einem Nullwert enthalten ist. Der Schlüssel existiert weiterhin.
0 Stimmen
@Aurangzeb, der Code funktioniert einwandfrei (sollte eine Antwort sein und ich würde ihn wegen seiner Einfachheit hoch bewerten).