Was ist eine einfache Möglichkeit, ein Element in der Mitte eines PHP-Array zu setzen?

StackOverflow https://stackoverflow.com/questions/620709

  •  05-07-2019
  •  | 
  •  

Frage

Sagen Sie 10 Element indiziert Array haben, und Sie wollen ein Element irgendwo in der Mitte platzieren (zB Index 3). Dann will ich den Rest des Feldes Verschiebung haben und somit 11 Elemente lang sein. Gibt es eine einfache Möglichkeit, dies zu tun?

Ich bin überrascht, es gibt keine put() Funktion oder so etwas.

Ich weiß es einfach genug sein würde, dies mit einer Kombination aus array_splice und array_merge zu tun, aber ich habe mich nur gefragt, ob es einen einfacheren Weg.

War es hilfreich?

Lösung

array_splice () tut dies

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");

Andere Tipps

Leider ist die beste Wahl, was Sie in Ihrem Beitrag beschrieben.

Wenn Sie array_splice (), wird PHP noch die halbe Array kopieren, den Einsatz zu tun, die eine Performance-Einbußen für große Feldgrößen sein. Vielleicht sollten Sie stattdessen eine Liste oder Baumdatenstruktur verwenden?

Das einzige Mal, dass ich gebraucht habe in der Mitte eines Feldes einzufügen war, als ich eine Operation tat, die Insertionsort im Wesentlichen ähnlich ist. Vielleicht möchten Sie die Elemente in einem Array unsortiert speichern und sortieren sie dann, wenn man sie alle hinzugefügt haben?

Keine PHP-Funktion kann dies zur Zeit behandeln. Es ist nicht allzu schwer zu schüren Ihre eigenen, aber:

function array_insert(&$array, $insert, $position) {
    $c = count($array);
    $slice = array_merge($insert, array_slice($array, $position));
    array_splice($array, $position, $c, $slice);
}

$array = array('a','b','d','e');
print_r($array);
array_insert($array, array('c'), 2);
print_r($array);

Wird ergeben:

Array
(
    [0] => a
    [1] => b
    [2] => d
    [3] => e
)
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

Sie können sich wahrscheinlich Prüfungen hinzufügen, wenn die Position größer als das Array ist, der Einsatz ist kein Array, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top