Introduzione agli array
Gli array standard possono essere indicizzati da stringhe o da numeri. Ogni elemento di un array può essere un valore normale, un altro array o un oggetto (istanza di classe).<?php
$friends=Array(
'Arthur',
'Charlie',
'Ben',
);
$friends[]='Donald';
print_r($friends);
sort($friends);
print_r($friends);
var_dump($friends);
echo serialize($friends);
Cose da notare:
- inizializzazione esplicita (in particolare, si veda la virgola anche dopo l'ultimo elemento, conviene che ci sia per future aggiunte)
- aggiunta di un elemento all'array
- funzioni varie per la gestione degli array
È lecito naturalmente anche inizializzare un array o un suo elemento con una chiave esplicitamente fornita, e valorizzarlo con oggetti o altri array:
<?php
$images=Array(
'bob' => new FamilyPicture('bob'),
'cat' => new AnimalPicture('cat'),
);
$images['andrew']=Array(
new FamilyPicture('andrew1'), new FamilyPicture('andrew2'),
);
Funzioni predefinite
Per imparare a usare correttamente le funzioni relative agli array è conveniente costrursi degli esempi specifici. Ad esempio, con un codice come il seguente...<pre>
<?php
function line() {
print(str_repeat("-=-", 10) . "\n");
}
$a1=array("Uno", "Due", "tre", "ch4"=>"quattro", "ch5"=>"cinque", "Sei");
print "originale\n";
print_r($a1);
line();
print "sort()\n";
$a2=$a1;
sort($a2);
print_r($a2);
line();
print "ksort()\n";
// risultati strani
$a2=$a1;
ksort($a2);
print_r($a2);
line();
print "asort()\n";
$a2=$a1;
asort($a2);
print_r($a2);
function cmp($a, $b)
{
// si potrebbe usare strnatcasecmp al posto di questa
if (strtoupper($a) == strtoupper($b)) {
return 0;
}
return (strtoupper($a) < strtoupper($b)) ? -1 : 1;
}
line();
print "usort(, \"cmp\")\n";
$a2=$a1;
usort($a2, "cmp");
print_r($a2);
line();
print "uasort(, \"cmp\")\n";
$a2=$a1;
uasort($a2, "cmp");
print_r($a2);
line();
line();
line();
$b=array(
array('name'=>'mario', 'surname'=>'rossi', 'age'=>20),
array('name'=>'giuseppe', 'surname'=>'verdi', 'age'=>40),
array('name'=>'stefania', 'surname'=>'bianchi', 'age'=>30),
array('name'=>'giorgia', 'surname'=>'neri', 'age'=>50),
);
function comparePersons($item1, $item2)
{
global $fieldname;
return (strcmp($item2[$fieldname], $item2[$fieldname]));
}
$fieldname='surname';
usort($b, 'comparePersons');
print_r($b);
... otteniamo un output come questo:
originale
Array
(
[0] => Uno
[1] => Due
[2] => tre
[ch4] => quattro
[ch5] => cinque
[3] => Sei
)
-=--=--=--=--=--=--=--=--=--=-
sort()
Array
(
[0] => Due
[1] => Sei
[2] => Uno
[3] => cinque
[4] => quattro
[5] => tre
)
-=--=--=--=--=--=--=--=--=--=-
ksort()
Array
(
[ch4] => quattro
[0] => Uno
[ch5] => cinque
[1] => Due
[2] => tre
[3] => Sei
)
-=--=--=--=--=--=--=--=--=--=-
asort()
Array
(
[1] => Due
[3] => Sei
[0] => Uno
[ch5] => cinque
[ch4] => quattro
[2] => tre
)
-=--=--=--=--=--=--=--=--=--=-
usort(, "cmp")
Array
(
[0] => cinque
[1] => Due
[2] => quattro
[3] => Sei
[4] => tre
[5] => Uno
)
-=--=--=--=--=--=--=--=--=--=-
uasort(, "cmp")
Array
(
[ch5] => cinque
[1] => Due
[ch4] => quattro
[3] => Sei
[2] => tre
[0] => Uno
)
-=--=--=--=--=--=--=--=--=--=-
-=--=--=--=--=--=--=--=--=--=-
-=--=--=--=--=--=--=--=--=--=-
Array
(
[0] => Array
(
[name] => giorgia
[surname] => neri
[age] => 50
)
[1] => Array
(
[name] => stefania
[surname] => bianchi
[age] => 30
)
[2] => Array
(
[name] => giuseppe
[surname] => verdi
[age] => 40
)
[3] => Array
(
[name] => mario
[surname] => rossi
[age] => 20
)
)
Esercizio
A partire da un codice come il seguente<html>
<head><title>sdf</title></head>
<body>
<pre>
<?php
$list=Array(
'bob'=>1,
'ada'=>2,
'charlie'=>0,
);
sort($list);
print_r($list);
?>
</pre>
</body>
</html>
modificare il codice per ottenere:
a) un array ordinato per chiave anziché per valore;
b) un array ordinato per valore, dove però le chiavi sono preservate.
Nessun commento:
Posta un commento