PHP
Strutture dati SPL
Ricerca…
SplFixedArray
Differenza dalla matrice PHP
Il tipo di array predefinito di PHP è in realtà implementato come mappe hash ordinate, che ci consentono di creare array costituiti da coppie chiave / valore in cui i valori possono essere di qualsiasi tipo e le chiavi possono essere numeri o stringhe. Questo non è tradizionalmente come vengono creati gli array, comunque.
Quindi, come puoi vedere da questa illustrazione, un normale array PHP può essere visualizzato più come un insieme ordinato di coppie chiave / valore, in cui ogni chiave può essere mappata a qualsiasi valore. Notate in questo array che abbiamo chiavi che sono sia numeri che stringhe, così come valori di diversi tipi e che la chiave non ha alcun rapporto con l'ordine degli elementi.
$arr = [
9 => "foo",
1 => 4.2,
"bar" => null,
];
foreach($arr as $key => $value) {
echo "$key => $value\n";
}
Quindi il codice sopra ci darebbe esattamente quello che ci aspetteremmo.
9 => foo 1 => 4.2 bar =>
Gli array PHP regolari sono anche dimensionati dinamicamente per noi. Crescono e si restringono quando spingiamo e scarichiamo i valori da e verso l'array, automaticamente.
Tuttavia, in un array tradizionale la dimensione è fissa e consiste interamente dello stesso tipo di valore. Inoltre, anziché le chiavi, ogni valore è accessibile dal suo indice, che può essere dedotto dal suo offset nell'array.
Poiché dovremmo conoscere la dimensione di un determinato tipo e la dimensione fissa della matrice, un offset è quindi la type size * n
del type size * n
erano n
rappresenta la posizione del valore nella matrice. Quindi nell'esempio sopra $arr[0]
ci dà 1
, il primo elemento dell'array e $arr[1]
ci dà 2
, e così via.
SplFixedArray, tuttavia, non limita il tipo di valori. Limita solo le chiavi ai tipi di numeri. È anche di dimensioni fisse.
Ciò rende SplFixedArrays più efficiente dei normali array PHP in un modo particolare. Sono più compatti e richiedono meno memoria.
Istanziare la matrice
SplFixedArray è implementato come un oggetto, ma è possibile accedervi con la stessa sintassi familiare che si accede a un normale array PHP poiché implementano l'interfaccia ArrayAccess
. Implementano anche interfacce Countable
e Iterator
modo che si comportino nello stesso modo in cui verrebbero utilizzati per gli array che si comportano in PHP (ad esempio cose come count($arr)
e foreach($arr as $k => $v)
funzionano allo stesso modo per SplFixedArray come fanno gli array normali in PHP.
Il costruttore SplFixedArray accetta un argomento, che è la dimensione della matrice.
$arr = new SplFixedArray(4);
$arr[0] = "foo";
$arr[1] = "bar";
$arr[2] = "baz";
foreach($arr as $key => $value) {
echo "$key => $value\n";
}
Questo ti dà quello che ti aspetteresti.
0 => foo 1 => bar 2 => baz 3 =>
Anche questo funziona come previsto.
var_dump(count($arr));
Ci da...
int(4)
Nota in SplFixedArray, diversamente da un normale array PHP, la chiave descrive l'ordine dell'elemento nel nostro array, perché è un indice vero e non solo una mappa .
Ridimensionamento dell'array
Tieni presente che, poiché la matrice ha una dimensione fissa, il conteggio restituirà sempre lo stesso valore. Quindi, mentre unset($arr[1])
risulterà in $arr[1] === null
, count($arr)
rimane ancora 4
.
Quindi per ridimensionare l'array dovrai chiamare il metodo setSize
.
$arr->setSize(3);
var_dump(count($arr));
foreach($arr as $key => $value) {
echo "$key => $value\n";
}
Ora otteniamo ...
int(3) 0 => foo 1 => 2 => baz
Importa in SplFixedArray ed esporta da SplFixedArray
È inoltre possibile importare / esportare un normale array PHP dentro e fuori un SplFixedArray con i metodi fromArray
e toArray
.
$array = [1,2,3,4,5];
$fixedArray = SplFixedArray::fromArray($array);
foreach($fixedArray as $value) {
echo $value, "\n";
}
1 2 3 4 5
Andando dall'altra parte
$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