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.

5.6

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 ) 

Eaxmple / Demo

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 )
*/
  1. 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.
  2. 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.
  3. Waarden in de invoerarray met cijfertoetsen worden hernummerd met oplopende toetsen vanaf nul in de resultaatarray.


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow