PHP
Een array manipuleren
Zoeken…
Elementen verwijderen uit een array
Om een element binnen een array te verwijderen, bijvoorbeeld het element met de index 1.
$fruit = array("bananas", "apples", "peaches");
unset($fruit[1]);
Hiermee worden de appels uit de lijst verwijderd, maar merk op dat unset
de indexen van de resterende elementen niet wijzigt. Dus $fruit
bevat nu de indexen 0
en 2
.
Voor associatieve array kunt u dit als volgt verwijderen:
$fruit = array('banana', 'one'=>'apple', 'peaches');
print_r($fruit);
/*
Array
(
[0] => banana
[one] => apple
[1] => peaches
)
*/
unset($fruit['one']);
Nu is $ fruit
print_r($fruit);
/*
Array
(
[0] => banana
[1] => peaches
)
*/
Let daar op
unset($fruit);
schakelt de variabele uit en verwijdert dus de hele array, wat betekent dat geen van de elementen meer toegankelijk zijn.
Terminalelementen verwijderen
array_shift () - Verplaats een element van het begin van de array.
Voorbeeld:
$fruit = array("bananas", "apples", "peaches");
array_shift($fruit);
print_r($fruit);
Output:
Array
(
[0] => apples
[1] => peaches
)
array_pop () - Verwijder het element van het einde van de array.
Voorbeeld:
$fruit = array("bananas", "apples", "peaches");
array_pop($fruit);
print_r($fruit);
Output:
Array
(
[0] => bananas
[1] => apples
)
Een array filteren
Om waarden uit een array te filteren en een nieuwe array te verkrijgen met alle waarden die voldoen aan de filtervoorwaarde, kunt u de functie array_filter
.
Niet-lege waarden filteren
Het eenvoudigste geval van filteren is het verwijderen van alle "lege" waarden:
$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];
Filteren op terugbellen
Deze keer definiëren we onze eigen filterregel. Stel dat we alleen even getallen willen krijgen:
$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter($my_array, function($number) {
return $number % 2 === 0;
});
De array_filter
functie ontvangt de te filteren array als zijn eerste argument en een callback die het filterpredikaat definieert als zijn tweede argument.
Filteren op index
Een derde parameter kan worden verstrekt aan de array_filter
functie, waarmee kan worden array_filter
welke waarden worden doorgegeven aan de callback. Deze parameter kan worden ingesteld op ARRAY_FILTER_USE_KEY
of ARRAY_FILTER_USE_BOTH
, waardoor de callback de sleutel ontvangt in plaats van de waarde voor elk element in de array, of zowel waarde en sleutel als argumenten. Als u bijvoorbeeld wilt omgaan met indexen in plaats van waarden:
$numbers = [16,3,5,8,1,4,6];
$even_indexed_numbers = array_filter($numbers, function($index) {
return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY);
Indexen in gefilterde array
Merk op dat array_filter
de originele array-sleutels behoudt. Een veel voorkomende fout zou zijn om een gebruik for
lus over de gefilterde array te proberen:
<?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
*/
Dit gebeurt omdat de waarden op positie 1 (er was 0
), 3 ( null
), 5 (lege string ''
) en 7 (lege array []
) werden verwijderd samen met hun overeenkomstige indexsleutels.
Als u het resultaat van een filter op een geïndexeerde array wilt array_values
, moet u eerst array_values
op het resultaat van array_filter
om een nieuwe array met de juiste indexen te maken:
$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!
Element toevoegen aan start van array
Soms wilt u een element toevoegen aan het begin van een array zonder de huidige elementen ( volgorde ) in de array te wijzigen . Wanneer dit het geval is, kunt u array_unshift()
.
array_unshift()
plaatst doorgegeven elementen voor de array. Houd er rekening mee dat de lijst met elementen als een geheel wordt weergegeven, zodat de vooraf ingestelde elementen in dezelfde volgorde blijven. Alle numerieke array-toetsen worden aangepast om te beginnen met tellen vanaf nul, terwijl letterlijke toetsen niet worden aangeraakt.
Ontleend aan de PHP-documentatie voor array_unshift()
.
Als u dit wilt bereiken, hoeft u alleen het volgende te doen:
$myArray = array(1, 2, 3);
array_unshift($myArray, 4);
Hiermee wordt nu 4
als het eerste element in uw array. U kunt dit verifiëren door:
print_r($myArray);
Dit retourneert een array in de volgende volgorde: 4, 1, 2, 3
.
Omdat array_unshift
de array dwingt om de sleutel / waarde-paren te resetten, aangezien het nieuwe element de sleutels n+1
de sleutels laat gebruiken, is het slimmer om een nieuwe array te maken en de bestaande array aan de nieuw gecreëerde array toe te voegen.
Voorbeeld:
$myArray = array('apples', 'bananas', 'pears');
$myElement = array('oranges');
$joinedArray = $myElement;
foreach ($myArray as $i) {
$joinedArray[] = $i;
}
Uitvoer ($ joinArray):
Array ( [0] => oranges [1] => apples [2] => bananas [3] => pears )
Zet slechts enkele array-toetsen op de witte lijst
Als u alleen bepaalde sleutels in uw arrays wilt toestaan, vooral wanneer de array afkomstig is van aanvraagparameters, kunt u array_intersect_key
samen met 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]
Als de parameters
variabele alle toegestane sleutel bevat, wordt de filteredParameters
variabele bestaat uit een lege array.
Sinds PHP 5.6 kunt u ook array_filter
voor deze taak gebruiken, waarbij u de vlag ARRAY_FILTER_USE_KEY
als derde parameter ARRAY_FILTER_USE_KEY
:
$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 );
Het gebruik van array_filter
geeft de extra flexibiliteit bij het uitvoeren van een willekeurige test tegen de sleutel, bijvoorbeeld $allowedKeys
kan regex-patronen bevatten in plaats van gewone tekenreeksen. Het vermeldt ook expliciet de bedoeling van de code dan array_intersect_key()
gecombineerd met array_flip()
.
Een array sorteren
Er zijn verschillende sorteerfuncties voor arrays in php:
soort()
Sorteer een array in oplopende volgorde op waarde.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
sort($fruits);
print_r($fruits);
resulteert in
Array
(
[0] => Apfel
[1] => Banane
[2] => Orange
[3] => Zitrone
)
rsort ()
Sorteer een array in aflopende volgorde op waarde.
$fruits = ['Zitrone', 'Orange', 'Banane', 'Apfel'];
rsort($fruits);
print_r($fruits);
resulteert in
Array
(
[0] => Zitrone
[1] => Orange
[2] => Banane
[3] => Apfel
)
een soort()
Sorteer een array in oplopende volgorde op waarde en behoud de oneffenheden.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
asort($fruits);
print_r($fruits);
resulteert in
Array
(
[4] => apple
[3] => banana
[1] => lemon
[2] => orange
)
arsort ()
Sorteer een array in aflopende volgorde op waarde en behoud de oneffenheden.
$fruits = [1 => 'lemon', 2 => 'orange', 3 => 'banana', 4 => 'apple'];
arsort($fruits);
print_r($fruits);
resulteert in
Array
(
[2] => orange
[1] => lemon
[3] => banana
[4] => apple
)
ksort ()
Sorteer een array in oplopende volgorde op sleutel
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
ksort($fruits);
print_r($fruits);
resulteert in
Array
(
[a] => orange
[b] => banana
[c] => apple
[d] => lemon
)
krsort ()
Sorteer een array in aflopende volgorde op toets.
$fruits = ['d'=>'lemon', 'a'=>'orange', 'b'=>'banana', 'c'=>'apple'];
krsort($fruits);
print_r($fruits);
resulteert in
Array
(
[d] => lemon
[c] => apple
[b] => banana
[a] => orange
)
natsort ()
Sorteer een array op een manier zoals een mens dat zou doen (natuurlijke volgorde).
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natsort($files);
print_r($files);
resulteert in
Array
(
[4] => File2.stack
[0] => File8.stack
[2] => file7.stack
[3] => file13.stack
[1] => file77.stack
)
natcasesort ()
Sorteer een array op een manier die een mens zou doen (natuurlijke volgorde), maar hoofdlettergevoelig
$files = ['File8.stack', 'file77.stack', 'file7.stack', 'file13.stack', 'File2.stack'];
natcasesort($files);
print_r($files);
resulteert in
Array
(
[4] => File2.stack
[2] => file7.stack
[0] => File8.stack
[3] => file13.stack
[1] => file77.stack
)
shuffle ()
Shuffles een array (willekeurig gesorteerd).
$array = ['aa', 'bb', 'cc'];
shuffle($array);
print_r($array);
Zoals beschreven in de beschrijving is het willekeurig, dus hier slechts één voorbeeld van wat het kan opleveren
Array
(
[0] => cc
[1] => bb
[2] => aa
)
usort ()
Sorteer een array met een door de gebruiker gedefinieerde vergelijkingsfunctie.
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);
resulteert in
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
[4] => 6
)
uasort ()
Sorteer een array met een door de gebruiker gedefinieerde vergelijkingsfunctie en bewaar de toetsen.
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);
resulteert in
Array
(
[e] => -5
[b] => -3
[a] => 1
[d] => 3
[c] => 5
)
uksort ()
Sorteer een array op toetsen met een door de gebruiker gedefinieerde vergelijkingsfunctie.
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);
resulteert in
Array
(
[ee] => 1
[g] => -3
[k] => 3
[oo] => -5
[4] => 5
)
Wissel waarden uit met sleutels
array_flip
functie array_flip
wisselt alle sleutels met de elementen ervan.
$colors = array(
'one' => 'red',
'two' => 'blue',
'three' => 'yellow',
);
array_flip($colors); //will output
array(
'red' => 'one',
'blue' => 'two',
'yellow' => 'three'
)
Twee arrays samenvoegen tot één array
$a1 = array("red","green");
$a2 = array("blue","yellow");
print_r(array_merge($a1,$a2));
/*
Array ( [0] => red [1] => green [2] => blue [3] => yellow )
*/
Associatieve array:
$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 )
*/
- Voegt de elementen van een of meer arrays samen, zodat de waarden van één aan het einde van de vorige worden toegevoegd. Het retourneert de resulterende array.
- Als de invoerarrays dezelfde string-toetsen hebben, zal de latere waarde voor die sleutel de vorige overschrijven. Als de arrays echter numerieke toetsen bevatten, overschrijft de latere waarde de oorspronkelijke waarde niet, maar wordt deze toegevoegd.
- Waarden in de invoerarray met cijfertoetsen worden hernummerd met oplopende toetsen vanaf nul in de resultaatarray.