Möglicherweise finden Sie dies etwas intuitiver. Es ist nur ein Funktionsaufruf erforderlich, um array_splice:
$original = array('a','b','c','d','e');
$inserted = array('x');// not necessarily an array, see manual quote
array_splice( $original,3,0, $inserted );// splice in at position 3// $original is now a b c x d e
Wenn das Ersetzen nur ein Element ist, ist es nicht erforderlich, array () darum zu setzen, es sei denn, das Element ist ein Array selbst, ein Objekt oder NULL.
Es ist seltsam, dass eine solche grundlegende Funktionalität tatsächlich irgendwie verborgen ist, da der Hauptzweck dieser Funktion, wie in der Dokumentation beschrieben, etwas anderes ist (Ersetzen von Dingen in Arrays). Ja, es wird im Abschnitt Argumente darauf hingewiesen, aber wenn Sie nur Funktionsbeschreibungen scannen, um herauszufinden, was zum Einfügen in Arrays verwendet werden soll, hätten Sie es nie gefunden.
Mahn
23
Nur zu sagen, dass dadurch keine Schlüssel im $insertedArray erhalten bleiben .
@JacerOmri es ist völlig richtig, beide Aussagen sind gültig. Sie können einen Wert eines beliebigen Typs übergeben, der sich jedoch für ein Array, ein Objekt oder null möglicherweise nicht gleich verhält. Für Skalare, Typ-casting (array)$scalarentspricht array($scalar), aber für ein Array, ein Objekt oder null, so wird er ignoriert (Array), Konvertieren zu einem Array (Objekt), oder wird , ein leeres Feld (null) - siehe php.net / manual / de /…
Lukas
2
@SunilPachlangia, adelval und andere: Bei mehrdimensionalen Arrays müssen Sie den Ersatz in ein Array einbinden, es ist dokumentiert. Ich habe die Notiz immer noch hierher gebracht, damit die Leute aufhören, den Fehler zu machen.
Félix Gagnon-Grenier
47
Eine Funktion, die sowohl an Ganzzahl- als auch an Zeichenfolgenpositionen eingefügt werden kann:
Der array_splice()verliert die Schlüssel, array_merge()der nicht. Die Ergebnisse der ersten Funktion können also sehr überraschend sein ... Vor allem, wenn Sie zwei Elemente mit demselben Schlüssel haben, wird nur der Wert des letzten beibehalten ...
Dies ist zwar schneller und wahrscheinlich speichereffizienter, aber nur dann wirklich geeignet, wenn die Schlüssel des Arrays nicht gewartet werden müssen.
Wenn Sie Schlüssel pflegen müssen, ist Folgendes besser geeignet.
function insertBefore($input, $index, $newKey, $element){if(!array_key_exists($index, $input)){thrownewException("Index not found");}
$tmpArray = array();foreach($input as $key => $value){if($key === $index){
$tmpArray[$newKey]= $element;}
$tmpArray[$key]= $value;}return $input;}function insertAfter($input, $index, $newKey, $element){if(!array_key_exists($index, $input)){thrownewException("Index not found");}
$tmpArray = array();foreach($input as $key => $value){
$tmpArray[$key]= $value;if($key === $index){
$tmpArray[$newKey]= $element;}}return $tmpArray;}
Das funktioniert gut. Doch im zweiten Beispiel, in Ihrer Funktion insertBefore(), sollten Sie zurückkommen $tmpArraystatt $input.
Christoph Fischer
4
Basierend auf der großartigen Antwort von @Halil finden Sie hier eine einfache Funktion zum Einfügen eines neuen Elements nach einem bestimmten Schlüssel unter Beibehaltung ganzzahliger Schlüssel:
Wenn Sie die Schlüssel des ursprünglichen Arrays behalten und auch ein Array mit Schlüsseln hinzufügen möchten, verwenden Sie die folgende Funktion:
function insertArrayAtPosition( $array, $insert, $position ){/*
$array : The initial array i want to modify
$insert : the new array i want to add, eg array('key' => 'value') or array('value')
$position : the position where the new array will be inserted into. Please mind that arrays start at 0
*/return array_slice($array,0, $position, TRUE)+ $insert + array_slice($array, $position, NULL, TRUE);}
Das hat bei mir für das assoziative Array funktioniert:
/*
* Inserts a new key/value after the key in the array.
*
* @param $key
* The key to insert after.
* @param $array
* An array to insert in to.
* @param $new_key
* The key to insert.
* @param $new_value
* An value to insert.
*
* @return
* The new array if the key exists, FALSE otherwise.
*
* @see array_insert_before()
*/function array_insert_after($key, array &$array, $new_key, $new_value){if(array_key_exists($key, $array)){
$new = array();foreach($array as $k => $value){
$new[$k]= $value;if($k === $key){
$new[$new_key]= $new_value;}}return $new;}return FALSE;}
Die Funktionsquelle - dieser Blog-Beitrag . Es gibt auch eine praktische Funktion zum Einfügen VOR einer bestimmten Taste.
Die Lösung von jay.lee ist perfekt. Wenn Sie einem mehrdimensionalen Array Elemente hinzufügen möchten, fügen Sie zuerst ein eindimensionales Array hinzu und ersetzen Sie es anschließend.
Durch Hinzufügen eines Elements im gleichen Format zu diesem Array werden alle neuen Array-Indizes als Elemente anstatt nur als Element hinzugefügt.
$new = array('title'=>'Time','width'=>10);
array_splice($original,1,0,array('random_string'));// can be more items
$original[1]= $new;// replaced with actual item
Hinweis: Wenn Sie Elemente mit array_splice direkt zu einem mehrdimensionalen Array hinzufügen, werden alle Indizes als Elemente anstelle nur dieses Elements hinzugefügt .
Zum Einfügen von Elementen in ein Array mit Zeichenfolgenschlüsseln haben Sie folgende Möglichkeiten:
/* insert an element after given array key
* $src = array() array to work with
* $ins = array() to insert in key=>array format
* $pos = key that $ins will be inserted after
*/function array_insert_string_keys($src,$ins,$pos){
$counter=1;foreach($src as $key=>$s){if($key==$pos){break;}
$counter++;}
$array_head = array_slice($src,0,$counter);
$array_tail = array_slice($src,$counter);
$src = array_merge($array_head, $ins);
$src = array_merge($src, $array_tail);return($src);}
Antworten:
Möglicherweise finden Sie dies etwas intuitiver. Es ist nur ein Funktionsaufruf erforderlich, um
array_splice
:quelle
$inserted
Array erhalten bleiben .(array)$scalar
entsprichtarray($scalar)
, aber für ein Array, ein Objekt oder null, so wird er ignoriert (Array), Konvertieren zu einem Array (Objekt), oder wird , ein leeres Feld (null) - siehe php.net / manual / de /…Eine Funktion, die sowohl an Ganzzahl- als auch an Zeichenfolgenpositionen eingefügt werden kann:
Ganzzahlige Verwendung:
String-Verwendung:
quelle
array_splice()
verliert die Schlüssel,array_merge()
der nicht. Die Ergebnisse der ersten Funktion können also sehr überraschend sein ... Vor allem, wenn Sie zwei Elemente mit demselben Schlüssel haben, wird nur der Wert des letzten beibehalten ...quelle
+
anstelle vonarray_merge
kann Schlüssel bewahrenAuf diese Weise können Sie Arrays einfügen:
quelle
Es gibt keine native PHP-Funktion (die mir bekannt ist), die genau das kann, was Sie angefordert haben.
Ich habe zwei Methoden geschrieben, die meiner Meinung nach zweckmäßig sind:
Dies ist zwar schneller und wahrscheinlich speichereffizienter, aber nur dann wirklich geeignet, wenn die Schlüssel des Arrays nicht gewartet werden müssen.
Wenn Sie Schlüssel pflegen müssen, ist Folgendes besser geeignet.
quelle
insertBefore()
, sollten Sie zurückkommen$tmpArray
statt$input
.Basierend auf der großartigen Antwort von @Halil finden Sie hier eine einfache Funktion zum Einfügen eines neuen Elements nach einem bestimmten Schlüssel unter Beibehaltung ganzzahliger Schlüssel:
quelle
Wenn Sie die Schlüssel des ursprünglichen Arrays behalten und auch ein Array mit Schlüsseln hinzufügen möchten, verwenden Sie die folgende Funktion:
Beispiel aufrufen:
quelle
quelle
Das hat bei mir für das assoziative Array funktioniert:
Die Funktionsquelle - dieser Blog-Beitrag . Es gibt auch eine praktische Funktion zum Einfügen VOR einer bestimmten Taste.
quelle
Dies ist auch eine funktionierende Lösung:
Credits gehen an: http://binarykitten.com/php/52-php-insert-element-and-shift.html
quelle
Die Lösung von jay.lee ist perfekt. Wenn Sie einem mehrdimensionalen Array Elemente hinzufügen möchten, fügen Sie zuerst ein eindimensionales Array hinzu und ersetzen Sie es anschließend.
Durch Hinzufügen eines Elements im gleichen Format zu diesem Array werden alle neuen Array-Indizes als Elemente anstatt nur als Element hinzugefügt.
Hinweis: Wenn Sie Elemente mit array_splice direkt zu einem mehrdimensionalen Array hinzufügen, werden alle Indizes als Elemente anstelle nur dieses Elements hinzugefügt .
quelle
Sie können dies verwenden
quelle
Normalerweise mit skalaren Werten:
Um ein einzelnes Array-Element in Ihr Array einzufügen, vergessen Sie nicht, das Array in ein Array zu verpacken (da es ein skalarer Wert war!):
Andernfalls werden alle Schlüssel des Arrays Stück für Stück hinzugefügt.
quelle
Hinweis zum Hinzufügen eines Elements am Anfang eines Arrays :
dann:
aber:
quelle
array_unshift($a,'i am the new first element');
Wenn Sie sich nicht sicher sind, VERWENDEN SIE DIESE NICHT :
ODER
denn mit + wird das ursprüngliche Array überschrieben. ( siehe Quelle )
quelle
Probier diese:
quelle
Beispiel aufrufen:
quelle
Zum Einfügen von Elementen in ein Array mit Zeichenfolgenschlüsseln haben Sie folgende Möglichkeiten:
quelle
$src = array_merge($array_head, $ins, $array_tail);
?