[PHP] Applicare natsort usando un array

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Ciao, rieccomi con un altro problema, sto cercando di capire come si fa per ordinare delle righe di un file di testo sfruttando un array.
questo e ciò che ho attualmente: un file chiamato squadra.txt
cosi composto:
Codice:
Carlo>Portiere
Marco>Attaccante
Paolo>Difensore
Antonio>Ala destra
Andrea>Ala sinistra
e questo e quello che vorrei riuscire ad ottenere, riscrivendo il file squadra.txt:
Codice:
Carlo>Portiere
 Paolo>Difensore
 Antonio>Ala destra
 Andrea>Ala sinistra
 Marco>Attaccante
sto cercando di venirne a capo e ho provato in questo modo:
PHP:
<?php
$array = array("Portiere", "Difensore", "Ala destra", "Ala sinistra", "Attaccante");

$file = "squadra.txt";

$righe = file($file);
$array = count($righe);

$sorted = array($array);
for ($nome=0; $nome<=$array; $nome++)
{
$sorted[$nome]    = $righe[$nome];
}

natsort($sorted);
print_r ($sorted);

$newfile = @fopen ("prova.txt", "a+");
for ($nome=0; $nome<=$array; $nome++)
{
@fwrite($newfile, $sorted[$nome]);
}

@fclose ($newfile);
?>
in pratica, finora riesco solo a leggere il file e stamparlo a video, ma vorrei riuscire a dargli l'ordine come riporto nell'array, ma non so come applicare l'array e riscrivere il file con il nuovo ordine dato. Grazie
 
Ultima modifica di un moderatore:

Eduadie

Utente Attivo
22 Mar 2013
58
7
8
www.mrrobotbet.altervista.org
Sei obbligato a memorizzare i dati in file squadra.txt in quel modo? Potresti fare una furbata per renderlo più semplice.

In ogni caso però dovresti manipolare ciò che leggi dal file magari arrivando ad ogni riga al carattere separatore (nel tuo caso >) e leggere ciò che c'è dopo. Magari raggruppare i nomi per questo valore e ordinarli ruolo per ruolo.

Altrimenti se puoi salvarli in altro modo identifichi 0 portieri, 1 difensore, 2 ala destra, 3 ala sinistra, 4 attaccante e il file squadra.txt in questo modo:

0Carlo
4Marco
1Paolo
2Antonio
3Andrea

e applicando un algoritmo di ordinamento li ordina in automatico bene :)

Spero di essere stato chiaro.

Edit: Ho visto che hai modificato il code ma non è chiaro cosa hai provato a fare...
 
Ultima modifica:

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
grazie per la risposta, il file che in realtà e molto più lungo, mi viene passato gia compilato in quel modo, pensavo proprio di sfruttare il carattere separatore > in effetti, ma va a capire come :):) ho voluto aggiornare il post, con una modifica in cui il file lo leggo e lo scrivo, ma non riesco ad avere modifiche, in pratica l'array non agisce
 
Ultima modifica:

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Abbi pazienza ma sono veramente mooolto scarso in questo settore, mi puoi dare qualche esempio? sto guardando in rete e la mia domanda é ? se converto la stringa dopo il > in un intero, associando ad ogni stringa un ruolo di gioco con l'intero, potrei ottenere il risultato voluto? ma come si fa?
 

Eduadie

Utente Attivo
22 Mar 2013
58
7
8
www.mrrobotbet.altervista.org
PHP:
<?php
$file = "squadra.txt";
$righe = file($file);
$numrighe = count($righe);

$portieri = array();
$difensori = array();
$aladestra = array();
$alasinistra = array();
$attaccante = array();


for($i=0; $i < $numrighe;$i++) {
    $riga = $righe[$i];
    list($giocatore, $ruolo) = split("[>]", $riga);
    if(strcmp($ruolo,"Portiere")) { array_push($portieri, $giocatore); }
    else if(strcmp($ruolo,"Difensore")) { array_push($difensori, $giocatore); }
    else if(strcmp($ruolo,"Ala destra")) { array_push($aladestra, $giocatore); }
    else if(strcmp($ruolo,"Ala sinistra")) { array_push($alasinistra, $giocatore); }
    else if(strcmp($ruolo,"Attaccante")) { array_push($attaccante, $giocatore); }      
}

?>

Una cosa del genere anche se non l'ho provato non avendo un file squadra.
Questo riguarderebbe magari la parte riguardante la gestione dei giocatori.
 
Ultima modifica:

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Ciao, grazie ancora, in questi giorni sono un po' incasinato e solo ora ho potuto provare lo script, ma pare non funzionare, stranamente mi riporta l'errore Deprecated: Function split() is deprecated on line 15 eppure il simbolo per lo split e quello ">",
Edit:
Ho modificato lo script e cambiato split ( ) con preg_split ( ), in questo modo non più l'errore
quindi pare funzionare, ma come riscrivo il nuovo file ordinato?
 
Ultima modifica:

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Proprio basandomi su questo che ho provato a mettere preg_split ( ) e pare funzonare per testare lo script sto usando XAMPP può essere questo il problema? o no? sono molto confuso, pur avendo molta voglia di imparare qualcosa della programmazione
 

Eduadie

Utente Attivo
22 Mar 2013
58
7
8
www.mrrobotbet.altervista.org
Nono Xampp è giusto come ambiente di sviluppo php, al termine dell'operazione dovresti scrivere su file ruolo per ruolo.

Svuoti gli array che hai riempito dei ruoli con a fianco >RUOLO utilizzando le funzioni per scrivere su file.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
il problema del deprecate non dipende da XAMP ma dalla versione php installata con XAMP
potresti comunque provare una cosa del genere
PHP:
<?php
/* esempio file squadra.txt
Carlo>Portiere
Marco>Attaccante
Paolo>Difensore
Giuseppe>Difensore
Antonio>Ala destra
Andrea>Ala sinistra
*/

$file="squadra.txt";
$righe=file($file);
$squadra=array();
foreach($righe as $riga){
    $elemento=explode(">",$riga);
    $elemento[1]=strtr($elemento[1]," ","_");//per key array
    $squadra[$elemento[1]][]=$elemento[0];
}
/*come risulta l'arry $quadra
$squadra['Portiere'][0]= Carlo
$squadra['Attaccante'][0]= Marco
$squadra['Difensore'][0]= Paolo
$squadra['Difensore'][1]= Giuseppe
$squadra['Ala_destra'][0]= Antonio
$squadra['Ala_sinistra'][0]= Andrea
*/
echo "la squadra è composta da<br />";
foreach($squadra as $ruoli => $elementi){
    //sort($elementi)://se vuoi mettere i nomi in ordine alfabetico
    $ruolo=strtr($ruoli,"_"," ");
    foreach($elementi as $nome){
        $n[]=$nome;
    }
    $nomi=implode(", ", $n);
    echo "$ruolo: $nomi<br />";
}
/* output
la squadra è composta da
Portiere: Cerlo
Attaccante; Marco
Difensore: Paolo, Giuseppe
Ala destra: Antonio
Ala sinistra: Andrea
*/
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
il problema dell'ordinamento devi risolvero manina manina, utilizzando i vari tipi di sort ordini o per chiave o per contenuto sia che tu utilizzi il metodo Eduadie o il mio.
il tentativo che hai fatto con $array = array("Portiere", "Difensore", "Ala destra", "Ala sinistra", "Attaccante");
potrebbe essere una strada
PHP:
<?php
//....quello che ho fatto io per leggere...
//in questo modo determini tu l'ordine di scrittura dei ruoli
$ordine_di_scrittura=array("Portiere", "Difensore", "Ala_destra", "Ala_sinistra", "Attaccante");//dove puoi aggiungere intertire eliminare ruoli (le chiavi degli arrai senza spazi)
$newfile = fopen ("prova.txt", "a+");//NON usare i silent @ gli errori NON vanno nascosti ma eliminati
if(!$newfile){exit();}//ho semplificato il controllo
foreach($ordine_di_scrittura as $ruolo){
    //qui la verifica che la $squadra[$ruolo] esista
    if(isset($squadra[$ruolo])){
        foreach($squadra[$ruolo] as $nomi){//il $nomi è un array es a che ne so i difensori sono due
            sort($nomi);//nomi in ordine alfabetico
            foreach($nomi as $nome){
                $da_scrivere="$nome>$ruolo/r";
                if(!fwrite($newfile, $da_scrivere)){
                    echo "$nome non inserito";
                }else{
                    echo "$nome ok";
                }
            }
        }
    }
}
fclose($newfile);
?>
 
  • Like
Reactions: Eduadie

giannit

Nuovo Utente
30 Mar 2017
31
2
8
58
Ciao, mi scuso per non aver risposto ma in questi giorni sono molto indagfarato con altro e ho accantonato al momento il problema. Grazie cmq per le risposte.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M Applicare funzione php ad ogni elemto html Ajax 3
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3

Discussioni simili