Ordinare il secondo elemento di uno split()

  • Creatore Discussione Creatore Discussione mm88
  • Data di inizio Data di inizio

mm88

Nuovo Utente
30 Ott 2008
14
0
0
Ciao a tutti, utilizzo una routine che legge il nome di alcuni file presenti in una cartella, composti da nome e cognome uniti da un underscore.

Riesco a separare il nome dal cognome utilizzando la funzione split, ma vorrei ordinarli solo in base al cognome.

Come posso inserire un asort() all'interno della routine?

O mi conviene seguire un modo diverso?


Vorrei un risultato del tipo:

giulio Bianchi
mario Rossi
anna Verde
ecc.


Ho provato aggiungendo:

$names = array(array('firstname' => $nome, 'lastname' => $cognome));

ma NON funziona.

Come devo modificare il codice?




codice:
Codice:
$nomi= @opendir($path) or die("Unable to open folder");

$num = 1;

while (($file = readdir($nomi)) == TRUE {

list ($nome, $cognome) = split ('[_]', $file);

echo "Nome: $nome; Cognome: $cognome;<br>\n";

$num++;

}




GRAZIE
 
prova a guardare questo link, puo darsi che ti serva

http://it.php.net/manual/it/function.array-multisort.php


Ti irngrazio per il link, ma non conosco bene php e non so come integrare la mia routine in modo da creare questo nuovo multisort array.

Non so come modificare il mio codice per creare questo nuovo array prima di leggerlo seguendo in ordine alfabetico il secondo parametro $cognome.


Qualcuno potrebbe indicarmi come modificare il codice?


GRAZIE
 
ciao
anche io non sono un espertissimo e quindi la soluzione che ho in mente potrebbe essere alqanto arzigogolata e un esperto potrebbe fare meglio


PHP:
$nomi= @opendir($path) or die("Unable to open folder");

$num = 0;
$nuovo_array=array();


while (($file = readdir($nomi)) == TRUE {

$esploso=explode("_",$file);
//in $esploso[0] ho il nome e in $esploso[1] il cognome

$nuovo_array[$num]=$esploso[1]."_".$esploso[0]; //inverto quindi ho cognome_nome
$num++;

}

asort($nuovo_array);//ordino - vedi anche sort su manuale php, se non ho capito male ordina l'array

for($k=0; $k <= $num; $k++){
$esploso=explode("_", $nuovo_array[$k];
//in $esploso[0] ho(almeno dovrei) il cognome e in $esploso[1] il nome

echo "nome $esploso[1] , cognome $esploso[0] <br>";

}

prova al massimo non funzia
link di sort
http://it.php.net/manual/it/function.sort.php
 
ti ringrazio per l'aiuto, perché - utilizzando sort() al posto di asort(), l'ordinamento appare in ordine alfabetico in base al cognome. L'unico problema rimane quello dei cognomi che contengono lettere accentate.

I cognomi che contengono lettere accentate, vengono messi dopo i nomi con la lettera 'z'.

Qualcuno ne conosce il motivo?


grazie
 
ciao
perche per ordinare viene fatto un confronto tra le stringhe carattere per carattere valutando il codice asci, i caratteri accentati hanno un codice asci > del codice asci di z (= 122)
 
scusa avevo letto male
che contengono o iniziano?

perchè in teoria

àndrea viene posto dopo zuzzerellone

ma (sempre in teoria perche non conosco quale algoritmo interno usi sort)

bànderas dovrebbe essere posto prima,
se provi con un semplice
if ("àndrea" < "zuzzerellone"){
echo "è vero è minore";
}else{
echo "è falso è maggiore";
}

ti darà: è falso è maggiore
 
scusa avevo letto male
che contengono o iniziano?

perchè in teoria

àndrea viene posto dopo zuzzerellone

ma (sempre in teoria perche non conosco quale algoritmo interno usi sort)

bànderas dovrebbe essere posto prima,
se provi con un semplice
if ("àndrea" < "zuzzerellone"){
echo "è vero è minore";
}else{
echo "è falso è maggiore";
}

ti darà: è falso è maggiore



Quelli che hanno anche l'ultima lettera del cognome accentata, vengono messi dopo la "z". Per questo non capisco.

grazie
 
Provato a sostituire le lettere accentate con le corrispondenti entità HTML?
 
sei sicuro di quello che dici?
ho provato questo semplice script

PHP:
<?php
$nomi=array();
$nome[0]="zuzzerellone";
$nome[1]="andreà";
$nome[2]="bànderas";
$nome[3]="àndreà";
$nome[4]="andrea";
$nome[5]="banderas";
sort($nome);
//asort($nome);
for ($k=0; $k <=5; $k++){
echo "n. ".$k.") ".$nome[$k]."<br>";
}
?>

e questo è l'output

n. 0) andrea
n. 1) andreà
n. 2) banderas
n. 3) bànderas
n. 4) zuzzerellone
n. 5) àndreà

solo àndreà è all'ultimo posto, come giustamente ho detto
anche se andreà ha l'ultima a accentata vine posto dopo andrea e prima di bandera come è giusto

verifica
ciao
 

Discussioni simili