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.

5.6

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 ) 

Eaxmple / Demo

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 )
*/
  1. 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.
  2. 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.
  3. I valori nell'array di input con i tasti numerici verranno rinumerati con le chiavi incrementali a partire da zero nell'array dei risultati.


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow