LORETTA B. forum

Linguaggi di programmazione => Php e MySql (data base) => Topic aperto da: micdas - Gennaio 22, 2009, 00:20:08

Titolo: alcune funzioni utili per le matrici
Inserito da: micdas - Gennaio 22, 2009, 00:20:08
Dopo aver visto il perchè delle matrici vorrei continuare a vedere come usare alcune funzioni che ritendo abbastanza utili per manipolare le matrici.
Qui sarò breve nelle spiegazioni anche perchè le funzioni che presento sono molto semplici e non necessitano di molte delucidazioni. L'importante è sapere della loro esistenza.

Abbiamo visto l'uso dei cicli FOR e FOREACH per spazzolare in modo sequenziale le matrici.
Ora vediamo come applicare alcune funzioni quali:
array_reverse() per invertire l'ordine con cui i valori sono stati memorizzati nella matrice
sort() per ordinare in modo crescente (direzione A - Z) i valori memorizzati nella matrice
rsort() per ordinare in modo decrescente (direzione Z - A) i valori memorizzati nella matrice
natcasesort() per ordinare in modo crescente (direzione A - Z) i valori memorizzati nella matrice
array_unique() per estrarre da una matrice i valori in maniera univoca, ossia senza ripetizioni
shuffle() per ordinare in modo casuale i valori memorizzati nella matrice


array_reverse()
Abbiamo una matrice creata in questo modo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$matrice 
= array("primo""secondo""terzo""quarto""quinto""sesto""settimo""ottavo""nono""decimo");
?>

Vogliamo che l'output dei valori memorizzati nella matrice inizi dall'ultimo elemento anzichè del primo:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$nuovoarray 
array_reverse ($matrice,TRUE);
foreach (
$nuovoarray as $valore) {
echo 
$valore "<br />";
}
?>

e questo il risultato
decimo
nono
ottavo
settimo
sesto
quinto
quarto
terzo
secondo
primo


sort()
Questa funzione ordina un array. Gli elementi saranno disposti dal più basso al più alto (A-Z)
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$nuovoarray 
$matrice;
sort($nuovoarray);
for (
$i=0$i count($nuovoarray); $i++) {
echo 
$nuovoarray[$i] . "<br />";
}
?>

decimo
nono
ottavo
primo
quarto
quinto
secondo
sesto
settimo
terzo


rsort()
Questa funzione ordina una matrice in senso inverso (Z-A)
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$nuovoarray 
$matrice;
rsort($nuovoarray);
for (
$i=0$i count($nuovoarray); $i++) {
echo 
$nuovoarray[$i] . "<br />";
}
?>

con questo risultato:
terzo
settimo
sesto
secondo
quinto
quarto
primo
ottavo
nono
decimo

Però ad usare le due funzioni appena viste c'è un piccolo inconveniente:
se la matrice contiene parole maiuscole e parole minuscole come in questo caso
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$matrice2 
= array("primo""secondo""terzo""quarto""Quinto""Sesto""settimo""ottavo""nono""decimo");
?>
usando la funzione sort(), vedremo questo risultato, ossia un doppio elenco formato da parole che iniziano con le maiscole e da parole che iniziano con lettere minuscole

Quinto
Sesto
decimo
nono
ottavo
primo
quarto
secondo
settimo
terzo


natcasesort()
Con la funzione natcasesort() si può ordinare nella direzione A - Z una matrice in modo caseinsensitive, ossia senza tener conto delle maiuscole e delle minuscole come dimostrato dal risultato di questo codice:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$nuovoarray 
$matrice2;
natcasesort($nuovoarray);
foreach (
$nuovoarray as $valore) {
echo 
$valore "<br />";
}
?>

decimo
nono
ottavo
primo
quarto
Quinto
secondo
Sesto
settimo
terzo


array_unique()
Un'altra funzione utile è array_unique()
Questa funzione estrae da una matrice tutti i dati in maniera non ripetuta, ossia in maniera univoca.
Vediamo questa matrice:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$matrice2 
= array("primo""secondo""terzo""quarto""quinto""sesto""settimo""ottavo""nono""decimo""Quarto""Quinto""Sesto""Settimo""Ottavo""secondo""terzo""quarto""quinto""sesto");
?>

Ci sono diverse parole (stringhe) duplicate, ma attenzione anche alle parole maiuscole.........
Applichiamo la funzione
Codice: Non sei autorizzato a vedere i links. Registrati o Login
<?php
$nuovoarray 
array_unique($matrice2);
foreach (
$nuovoarray as $valore) {
echo 
$valore "<br />";
}
?>

per ottenere questo
primo
secondo
quinto
settimo
ottavo
nono
decimo
Quarto
Quinto
Sesto
Settimo
Ottavo
terzo
quarto
sesto

Come vedete i valori sono stati ridotti, ma le maiuscole persistono ancora nell'elenco finale.
Ho cercato tra le varie funzioni presenti in PHP ma non sono riuscito a trovare una funzione simile case-insensitive (cioè non sensibile al maiuscolo - minuscolo.
Se vedo che l'argomento possa interessare in un prossimo futuro posso dare una mia soluzione.


shuffle()
Ma ora chiudiamo, anche per non appesantire troppo l'argomento con una piccola chicca per gli amanti della casualità: ordinare in modo casuale una matrice
Il codice usato per questa funzione è semplice, come quelli fin qui presentati:
Codice: Non sei autorizzato a vedere i links. Registrati o Login
$nuovoarray = $matrice2;
shuffle($nuovoarray);
foreach ($nuovoarray as $valore) {
echo $valore . "<br />";
}

che restituisce una cosa del genere:
secondo
primo
Sesto
Quinto
terzo
ottavo
quarto
settimo
decimo
nono

Ma anche per questo ho un mio metodo per generare dei numeri casuali ed ordinarli in modo casuale.

Per ora termino qui, quindi  :bye: