PHP
Manipolazione di una matrice
Ricerca…
Rimozione di elementi da un array
Per rimuovere un elemento all'interno di un array, ad es. L'elemento con l'indice 1.
$fruit = array("bananas", "apples", "peaches");
unset($fruit[1]);
Questo rimuoverà le mele dall'elenco, ma noterai che unset
non cambia gli indici degli elementi rimanenti. Quindi $fruit
ora contiene gli indici 0
e 2
.
Per l'array associativo puoi rimuovere in questo modo:
$fruit = array('banana', 'one'=>'apple', 'peaches');
print_r($fruit);
/*
Array
(
[0] => banana
[one] => apple
[1] => peaches
)
*/
unset($fruit['one']);
Ora $ frutto è
print_r($fruit);
/*
Array
(
[0] => banana
[1] => peaches
)
*/
Nota che
unset($fruit);
disattiva la variabile e quindi rimuove l'intero array, il che significa che nessuno dei suoi elementi è più accessibile.
Rimozione di elementi terminali
array_shift () - Sposta un elemento dall'inizio della matrice.
Esempio:
$fruit = array("bananas", "apples", "peaches");
array_shift($fruit);
print_r($fruit);
Produzione:
Array
(
[0] => apples
[1] => peaches
)
array_pop () : espelle l'elemento alla fine dell'array.
Esempio:
$fruit = array("bananas", "apples", "peaches");
array_pop($fruit);
print_r($fruit);
Produzione:
Array
(
[0] => bananas
[1] => apples
)
Filtrare una matrice
Per filtrare i valori da una matrice e ottenere un nuovo array contenente tutti i valori che soddisfano la condizione del filtro, è possibile utilizzare la funzione array_filter
.
Filtro di valori non vuoti
Il caso più semplice di filtraggio è quello di rimuovere tutti i valori "vuoti":
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$non_empties = array_filter($my_array); // $non_empties will contain [1,2,3,4,5,6,7,8];
Filtro per callback
Questa volta definiamo la nostra regola di filtraggio. Supponiamo di voler ottenere solo numeri pari:
$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter($my_array, function($number) {
return $number % 2 === 0;
});
La funzione array_filter
riceve l'array da filtrare come primo argomento e un callback che definisce il predicato del filtro come secondo.
Filtro per indice
Un terzo parametro può essere fornito alla funzione array_filter
, che consente di modificare i valori passati al callback. Questo parametro può essere impostato su ARRAY_FILTER_USE_KEY
o ARRAY_FILTER_USE_BOTH
, il che comporterà la richiamata che riceve la chiave anziché il valore per ciascun elemento nell'array, o sia il valore sia la chiave come argomenti. Ad esempio, se vuoi trattare con gli indici di valori:
$numbers = [16,3,5,8,1,4,6];
$even_indexed_numbers = array_filter($numbers, function($index) {
return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY);
Indici nella matrice filtrata
Nota che array_filter
conserva le chiavi dell'array originale. Un errore comune sarebbe provare un uso for
ciclo sull'array filtrato:
<?php
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$filtered = array_filter($my_array);
error_reporting(E_ALL); // show all errors and notices
// innocently looking "for" loop
for ($i = 0; $i < count($filtered); $i++) {
print $filtered[$i];
}
/*
Output:
1
Notice: Undefined offset: 1
2
Notice: Undefined offset: 3
3
Notice: Undefined offset: 5
4
Notice: Undefined offset: 7
*/
Ciò accade perché i valori che erano sulle posizioni 1 (c'era 0
), 3 ( null
), 5 (stringa vuota ''
) e 7 (array vuoto []
) sono stati rimossi insieme alle corrispondenti chiavi di indice.
Se è necessario eseguire il loop del risultato di un filtro su un array indicizzato, è necessario innanzitutto chiamare array_values
sul risultato di array_filter
per creare un nuovo array con gli indici corretti:
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$filtered = array_filter($my_array);
$iterable = array_values($filtered);
error_reporting(E_ALL); // show all errors and notices
for ($i = 0; $i < count($iterable); $i++) {
print $iterable[$i];
}
// No warnings!
Aggiunta di elementi all'avvio della matrice
A volte si desidera aggiungere un elemento all'inizio di una matrice senza modificare alcuno degli elementi correnti ( ordine ) all'interno dell'array . Ogni volta che questo è il caso, puoi usare array_unshift()
.
array_unshift()
antepone gli elementi passati alla parte anteriore dell'array. Si noti che l'elenco di elementi viene preposto nel suo complesso, in modo che gli elementi anteposti rimangano nello stesso ordine. Tutti i tasti di matrice numerica saranno modificati per iniziare a contare da zero mentre i tasti letterali non saranno toccati.
Tratto dalla documentazione di PHP per array_unshift()
.
Se desideri ottenere questo, tutto ciò che devi fare è il seguente:
$myArray = array(1, 2, 3);
array_unshift($myArray, 4);
Questo ora aggiungerà 4
come primo elemento dell'array. Puoi verificare questo:
print_r($myArray);
Ciò restituisce una matrice nel seguente ordine: 4, 1, 2, 3
.
Poiché array_unshift
forza l'array a reimpostare le coppie valore-chiave come nuovo elemento, lascia che le seguenti voci abbiano le chiavi n+1
, è più intelligente creare un nuovo array e aggiungere l'array esistente all'array appena creato.
Esempio:
$myArray = array('apples', 'bananas', 'pears');
$myElement = array('oranges');
$joinedArray = $myElement;
foreach ($myArray as $i) {
$joinedArray[] = $i;
}
Output ($ unitedArray):
Array ( [0] => oranges [1] => apples [2] => bananas [3] => pears )
Whitelist solo alcune chiavi di array
Quando si desidera consentire solo determinati tasti negli array, in particolare quando l'array proviene dai parametri di richiesta, è possibile utilizzare array_intersect_key
insieme a array_flip
.
$parameters = ['foo' => 'bar', 'bar' => 'baz', 'boo' => 'bam']; $allowedKeys = ['foo', 'bar']; $filteredParameters = array_intersect_key($parameters, array_flip($allowedKeys)); // $filteredParameters contains ['foo' => 'bar', 'bar' => 'baz]
Se la variabile parameters
non contiene alcuna chiave consentita, la variabile filteredParameters
sarà composta da una matrice vuota.
Dal momento che PHP 5.6 è possibile utilizzare array_filter
per questa attività, passando il flag ARRAY_FILTER_USE_KEY
come terzo parametro:
$parameters = ['foo' => 1, 'hello' => 'world']; $allowedKeys = ['foo', 'bar']; $filteredParameters = array_filter( $parameters, function ($key) use ($allowedKeys) { return in_array($key, $allowedKeys); }, ARRAY_FILTER_USE_KEY );
L'uso di array_filter
offre la flessibilità aggiuntiva di eseguire un test arbitrario contro la chiave, ad esempio $allowedKeys
potrebbe contenere modelli regex invece di stringhe semplici. Inoltre, afferma esplicitamente l'intenzione del codice rispetto a array_intersect_key()
combinato con array_flip()
.
Ordinamento di una matrice
Esistono diverse funzioni di ordinamento per gli array in PHP:
ordinare()
Ordina una matrice in ordine crescente per valore.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
sort($fruits);
print_r($fruits);
risultati in
Array
(
[0] => Apfel
[1] => Banane
[2] => Orange
[3] => Zitrone
)
rsort ()
Ordina una matrice in ordine decrescente per valore.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
rsort($fruits);
print_r($fruits);
risultati in
Array
(
[0] => Zitrone
[1] => Orange
[2] => Banane
[3] => Apfel
)
asort ()
Ordina una matrice in ordine crescente per valore e conserva le indecie.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
asort($fruits);
print_r($fruits);
risultati in
Array
(
[4] => apple
[3] => banana
[1] => lemon
[2] => orange
)
arsort ()
Ordina una matrice in ordine decrescente per valore e preserva le indecie.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
arsort($fruits);
print_r($fruits);
risultati in
Array
(
[2] => orange
[1] => lemon
[3] => banana
[4] => apple
)
ksort ()
Ordina una matrice in ordine crescente per chiave
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
ksort($fruits);
print_r($fruits);
risultati in
Array
(
[a] => orange
[b] => banana
[c] => apple
[d] => lemon
)
krsort ()
Ordina una matrice in ordine decrescente per chiave.
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
krsort($fruits);
print_r($fruits);
risultati in
Array
(
[d] => lemon
[c] => apple
[b] => banana
[a] => orange
)
natsort ()
Ordina un array in un modo che un essere umano farebbe (ordine naturale).
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natsort($files);
print_r($files);
risultati in
Array
(
[4] => File2.stack
[0] => File8.stack
[2] => file7.stack
[3] => file13.stack
[1] => file77.stack
)
natcasesort ()
Ordina un array in un modo che un essere umano farebbe (ordine naturale), ma intensivo per il caso
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natcasesort($files);
print_r($files);
risultati in
Array
(
[4] => File2.stack
[2] => file7.stack
[0] => File8.stack
[3] => file13.stack
[1] => file77.stack
)
Shuffle ()
Mescola un array (ordinato in ordine casuale).
$array = ['aa', 'bb', 'cc'];
shuffle($array);
print_r($array);
Come scritto nella descrizione è casuale, quindi qui solo un esempio in ciò che può risultare
Array
(
[0] => cc
[1] => bb
[2] => aa
)
usort ()
Ordina una matrice con una funzione di confronto definita dall'utente.
function compare($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = [3, 2, 5, 6, 1];
usort($array, 'compare');
print_r($array);
risultati in
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 6
)
uasort ()
Ordina una matrice con una funzione di confronto definita dall'utente e conserva le chiavi.
function compare($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = ['a' => 1, 'b' => -3, 'c' => 5, 'd' => 3, 'e' => -5];
uasort($array, 'compare');
print_r($array);
risultati in
Array
(
[e] => -5
[b] => -3
[a] => 1
[d] => 3
[c] => 5
)
uksort ()
Ordina un array per chiavi con una funzione di confronto definita dall'utente.
function compare($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$array = ['ee' => 1, 'g' => -3, '4' => 5, 'k' => 3, 'oo' => -5];
uksort($array, 'compare');
print_r($array);
risultati in
Array
(
[ee] => 1
[g] => -3
[k] => 3
[oo] => -5
[4] => 5
)
Scambia valori con le chiavi
array_flip
funzione array_flip
scambierà tutte le chiavi con i suoi elementi.
$colors = array(
'one' => 'red',
'two' => 'blue',
'three' => 'yellow',
);
array_flip($colors); //will output
array(
'red' => 'one',
'blue' => 'two',
'yellow' => 'three'
)
Unisci due array in un array
$a1 = array("red","green");
$a2 = array("blue","yellow");
print_r(array_merge($a1,$a2));
/*
Array ( [0] => red [1] => green [2] => blue [3] => yellow )
*/
Array associativo:
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
print_r(array_merge($a1,$a2));
/*
Array ( [a] => red [b] => yellow [c] => blue )
*/
- Unisce gli elementi di uno o più array insieme in modo che i valori di uno vengano aggiunti alla fine del precedente. Restituisce la matrice risultante.
- Se gli array di input hanno le stesse chiavi stringa, il valore successivo per quella chiave sovrascriverà quello precedente. Se, tuttavia, gli array contengono chiavi numeriche, il valore successivo non sovrascriverà il valore originale, ma verrà aggiunto.
- I valori nell'array di input con i tasti numerici verranno rinumerati con le chiavi incrementali a partire da zero nell'array dei risultati.