Looking for php Keywords? Try Ask4Keywords

PHP SplFixedArray


Beispiel

Unterschied zum PHP-Array

Der Standard-Array-Typ von PHP ist tatsächlich als geordnete Hash-Map implementiert, die es uns ermöglicht, Arrays zu erstellen, die aus Schlüssel / Wert-Paaren bestehen, wobei Werte von beliebigem Typ sein können und Schlüssel entweder Zahlen oder Strings sein können. Auf diese Weise werden Arrays jedoch traditionell nicht erstellt.

Traditionelles PHP-Array Abbildung 1

Wie Sie in dieser Abbildung sehen können, kann ein normales PHP-Array eher als eine geordnete Menge von Schlüssel / Wert-Paaren betrachtet werden, wobei jeder Schlüssel einem beliebigen Wert zugeordnet werden kann. Beachten Sie, dass wir in diesem Array Schlüssel haben, die sowohl Zahlen als auch Strings sind, sowie Werte verschiedener Typen. Der Schlüssel hat keinen Einfluss auf die Reihenfolge der Elemente.

$arr = [
    9     => "foo",
    1     => 4.2,
    "bar" => null,
];

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

Der obige Code würde uns also genau das geben, was wir erwarten würden.

9 => foo
1 => 4.2
bar => 

Regelmäßige PHP-Arrays haben für uns ebenfalls eine dynamische Größe. Sie wachsen und schrumpfen, wenn wir die Werte automatisch in das und aus dem Array schieben und platzieren.


In einem herkömmlichen Array ist die Größe jedoch fest und besteht ausschließlich aus demselben Wert. Anstelle von Schlüsseln wird auch auf jeden Wert über seinen Index zugegriffen, der durch seinen Versatz im Array abgeleitet werden kann.

SplFixedArray Abbildung 2

Da wir die Größe eines gegebenen Typs und die feste Größe des Arrays kennen, ist ein Offset der type size * n , wobei n die Position des Werts im Array darstellt. In obigem Beispiel ergibt $arr[0] 1 , das erste Element im Array und $arr[1] 2 und so weiter.

SplFixedArray schränkt den Wertetyp jedoch nicht ein. Es beschränkt nur die Schlüssel auf Nummernarten. Es hat auch eine feste Größe.

Dies macht SplFixedArrays auf eine bestimmte Weise effizienter als normale PHP-Arrays. Sie sind kompakter und benötigen daher weniger Speicherplatz.

Das Array wird instantiiert

SplFixedArray ist als Objekt implementiert, es kann jedoch mit derselben bekannten Syntax zugegriffen werden, mit der Sie auf ein normales PHP-Array zugreifen, seit sie die ArrayAccess Schnittstelle implementieren. Sie implementieren auch Countable und Iterator Schnittstellen, so dass sie sich genauso verhalten wie Arrays, die sich in PHP verhalten (z. B. count($arr) und foreach($arr as $k => $v) SplFixedArray wie normale Arrays in PHP.

Der SplFixedArray-Konstruktor akzeptiert ein Argument, nämlich die Größe des Arrays.

$arr = new SplFixedArray(4);

$arr[0] = "foo";
$arr[1] = "bar";
$arr[2] = "baz";

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

Das gibt Ihnen das, was Sie erwarten würden.

0 => foo
1 => bar
2 => baz
3 => 

Dies funktioniert auch wie erwartet.

var_dump(count($arr));

Gibt uns...

int(4)

Beachten Sie in SplFixedArray, dass der Schlüssel im Gegensatz zu einem normalen PHP-Array die Reihenfolge des Elements in unserem Array darstellt, da es sich um einen echten Index und nicht nur um eine Map handelt .

Ändern der Größe des Arrays

Denken Sie jedoch daran, dass count immer den gleichen Wert zurückgibt, da das Array eine feste Größe hat. Während unset($arr[1]) $arr[1] === null , bleibt count($arr) immer noch 4 .

Um die Größe des Arrays zu ändern, müssen Sie die setSize Methode setSize .

$arr->setSize(3);

var_dump(count($arr));

foreach($arr as $key => $value) {
    echo "$key => $value\n";
}

Jetzt bekommen wir ...

int(3)
0 => foo
1 => 
2 => baz

In SplFixedArray importieren und aus SplFixedArray exportieren

Sie können auch ein normales PHP-Array mit den Methoden fromArray und toArray in einen SplFixedArray fromArray und daraus toArray .

$array      = [1,2,3,4,5];
$fixedArray = SplFixedArray::fromArray($array);

foreach($fixedArray as $value) {
    echo $value, "\n";
}
1
2
3
4
5

Den anderen Weg gehen.

$fixedArray = new SplFixedArray(5);

$fixedArray[0] = 1;
$fixedArray[1] = 2;
$fixedArray[2] = 3;
$fixedArray[3] = 4;
$fixedArray[4] = 5;

$array = $fixedArray->toArray();

foreach($array as $value) {
    echo $value, "\n";
}
1
2
3
4
5