• User

    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("Ñ","&#209;",$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>
    

    davidemancuso 1 Risposta
  • User

    @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.


  • User

    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


  • User

    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;
    ?>
    

  • Moderatore

    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.