- Home
- Categorie
- Coding e Sistemistica
- PHP
- Replace trattino se vuoto successivamente
-
Replace trattino se vuoto successivamente
Ciao a tutti
ho questo script dove recupero del testo e poi lo splitto in 3 parti mediante trattino.
Il testo standard è: ARTISTA - BRANO - ANNO
Ma molte delle volte per mie esigenze il testo è: ARISTA -
Cioè nome artista, trattino e poi nulla, come posso fare un replace che mi tolga lo spazio e trattino lasciando solo ARTISTA ?
Grazie
Ecco lo script<?php $percorso_file = ('file.txt'); $file = fopen($percorso_file,rb); $riga = fread($file,1024); $valore1 = explode(" - ",$riga); fclose($file); $valorex = str_replace("Ñ","Ñ",$valore1); ?> <span class="artista" ><?php echo $valorex[0]?></span><br> <span class="titolo" ><?php echo $valorex[1]?></span><br> <span class="anno" ><?php echo $valorex[2]?></span>
1 Risposta -
@djjunior Ciao,
Occorre seguire il ragionamento che segue soprattutto evitando che nel codice DOM siano presenti spazi vuoti:
Se artista non è vuoto, mostra artista.
Se brano non è vuoto, mostra brano.
Se anno non è vuoto, mostra anno.Se artista è sempre presente, il compito è più semplice in quanto potrai mostrare il trattino dove necessario:
Se brano non è vuoto, mostra - e brano:
<?php if ( !empty( $valorex[0] ) ) : echo $valorex[0]; endif; // Result: Artista if ( !empty( $valorex[1] ) ) : echo '-' . $valorex[1]; endif; // Result: - Brano if ( !empty( $valorex[2] ) ) : echo '-' . $valorex[2]; endif; // Result: - Anno ?>
Ci sono poi altre soluzioni: contare il numero di elementi presenti nell'array. Quindi se ce n'è uno solo, eviti di inserire il trattino.
Oppure tramite CSS con i selettori ::after o ::before grazie ai quali puoi aggiungere dei contenuti.L'importante però è sempre verificare la presenza del contenuto, e mostrare il codice che lo riguarda solo se è presente.
-
Ciao, forse mi sono spiegato sicuramente male, ma per i valorex è già splittato cioè elimina il trattino.
cosa succede che nel file txt ad un certo punto può essere scritto per esempio: ARTISTA -
quindi il valorex non lo splitta e lo pubblica, quindi vorrei eliminarlo ma solo in questo caso, grazie
-
In questo caso puoi usare la funzione rtrim di PHP che ti consente di rimuovere gli spazi bianchi alla fine della stringa più dei caratteri, quindi:
<?php $artista = rtrim( $valorex[0], "-" ); echo $artista; ?>
-
Provo a dare una soluzione alternativa:
Vediamo se ho capito, la situazione è che alcune righe hanno
'ARTISTA - BRANO - ANNO'
e alcune solo'ARTISTA -'
dove dopo il trattino medio non c'è lo spazio, ho capito bene?E ad ogni modo l'ordine delle parole è sempre quello, giusto?
Comunque, quello che puoi fare è usare la funzione preg_match_all in questo modo:
<?php $row = 'ARTISTA - BRANO - ANNO'; \preg_match_all('/[a-zA-Z]+/', $row, $matches );
Qui il risultato: https://3v4l.org/PvdBg
Ora tutte le parole trovate sono contenute nell'array
$matches[0]
che puoi trattare in questo modo:<?php foreach ( $matches[0] as $word ) { \printf( '<br><span class="%1$s">%2$s</span>', \strtolower( $word ), $word ); }
Il vantaggio è che non hai bisogno di usare le
if
e se$matches[0]
fosse vuoto non printa nulla con il risultato che così il codice è più leggibile.