PHP

Arrays verwerken met foreach

Er zijn twee varianten van foreach:
foreach ($array as $waarde) expressie
foreach ($array as $sleutel => $waarde) expressie
 
Voorbeeld:
$maand = array(1 => "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december");
foreach ($maand as $maandnummer => $maandnaam) {
echo $maandnummer . " = " . $maandnaam . "<br>";
}

Array vullen met explode

Je kunt een string omzetten in een array met explode:
$maanden = "januari, februari, maart, april, mei, juni, juli, augustus, september, oktober, november, december";
$maand = explode(", ",$maanden);
echo $maand[0]; // januari
echo $maand[1]; // februari

Tekenreeks in een string vervangen met str_replace

Gebruik: str_replace ( $search , $replace , $subject)
Deze functie levert een string of array op waarin alle gevallen van $search in $subject vervangen zijn met de opgegeven $repace waarde.
Voorbeeld:
$zin = "Je moet elke dag groente, fruit en vezels eten.";
$gezond = array("groente", "fruit", "vezels");
$lekker = array("pizza", "donuts", "roomijs");

$nieuwezin = str_replace($gezond, $lekker, $zin);
// Levert: Je moet elke dag pizza, donuts en roomijs eten.

Nog een voorbeeld:
$tekst = str_replace('de','the','de man in de mirror');
// Levert: the man in the mirror

Arrays sorteren met array_multisort

Gebruik:
array_multisort ( array &$arr [, $arg = SORT_ASC [, $arg = SORT_REGULAR [, $... ]]] )

array_multisort() kan gebruikt worden om meerdere arrays tegelijkertijd te sorteren of om een mulidimensionale array op één of meer dimensies te sorteren.

Associatieve (string) sleutels blijven gehandhaafd, maar numerieke sleutels worden geherindexeerd.

Parameters:

arr : Een array die gesorteerd wordt.
arg : Optioneel een andere array, of sorteer opties voor het vorige array argument: SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.
... : Nog meer arg's.

Voorbeeld 1 : meerdere arrays sorteren

<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);
?>

In dit voorbeeld zal na het sorteren de eerste array 0, 10, 100, 100 bevatten. De tweede array zal 4, 1, 2, 3 bevatten. De elementen van de tweede array die overeenkomen met elementen die in de eerste array gelijk zijn, zijn ook gesorteerd.

array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}

Voorbeeld 2 : een multidimensionale array sorteren

<?php
$ar = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>

In dit voorbeeld zal na het sorteren de eerste array bevatten: "10", 100, 100, 11, "a" (gesorteerd als strings in oplopende volgorde). De tweede array zal bevatten: 1, 3, "2", 2, 1 (gesorteerd als nummers in aflopende volgorde).

array(2) {
  [0]=> array(5) {
    [0]=> string(2) "10"
    [1]=> int(100)
    [2]=> int(100)
    [3]=> int(11)
    [4]=> string(1) "a"

  }
  [1]=> array(5) {
    [0]=> int(1)
    [1]=> int(3)
    [2]=> string(1) "2"
    [3]=> int(2)
    [4]=> int(1)
  }
}

Voorbeeld 3 : database resultaten sorteren

In dit voorbeeld is elk element van de data array een rij in een tabel.

Voorbeeld data:

volume | editie
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

De data is een array met de naam data. Deze wordt meestal verkregen door mysql_fetch_assoc() in een loop te gebruiken.

<?php
$data[] = array('volume' => 67, 'editie' => 2);
$data[] = array('volume' => 86, 'editie' => 1);
$data[] = array('volume' => 85, 'editie' => 6);
$data[] = array('volume' => 98, 'editie' => 2);
$data[] = array('volume' => 86, 'editie' => 6);
$data[] = array('volume' => 67, 'editie' => 7);
?>

In dit voorbeeld wordt volume aflopend en editie oplopend gesorteerd.

We hebben een array van rijen, maar array_multisort() verlangt een array van kolommen:

<?php
// Een lijst van kolommen verkrijgen
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $editie[$key] = $row['editie'];
}

// Voeg $data als de laatste parameter toe, te sorteren op de  gemeenschappelijke sleutel
array_multisort($volume, SORT_DESC, $editie, SORT_ASC, $data);
?>

De gegevens zijn nu als volgt gesorteerd:

volume | editie
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

Voorbeeld 4 : sorteren zonder verschil te maken tussen hoofdletters en kleine letters

Zowel SORT_STRING als SORT_REGULAR zijn hoofdletter gevoelig, strings die starten met een hoofdletter komen voor strings die starten met een kleine letter.

Om te sorteren zonder verschil te maken tussen hoofdletters en kleine letters moet de sorteervolgorde bepaald worden door een kleine letter kopie van de originele array.

<?php
$array = array('Alpha', 'appel', 'Beta', 'banaan');
$array_lowercase = array_map('strtolower', $array);

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);

print_r($array);
?>

Het bovenstaande zal opleveren:

Array
(
    [0] => Alpha
    [1] => appel
    [2] => banaan
    [3] => Beta
)

 

--Bedankt voor uw bezoek.--