• User Attivo

    Spezzare stringhe

    Salve, vi espongo un problema e spero di riuscirci in modo chiaro.
    Ho creato una pagina di stampa su etichetta usando la libreria fpdf. In questa etichetta vado a stampare un nominativo e l'agenzia di appartenenza.

    Vi posto il codice

    [php]
    //Creo una stringa che unisce le due variabili "cognome" e "nome"
    $nominativo = $SESSION['nome'.$a] . " " . $SESSION['cognome'.$a];
    $numero_nominativo = strlen($nominativo);

    //Apro la libreria fpdf
    require('../pdf/fpdf.php');
    $pdf=new FPDF('L','mm',array(270,880));
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',120);

    //Stampa nome e cognome. Se il numero di caratteri supera 35, stampo
    //nome e cognome su due righe. Altrimenti li stampo sulla stessa riga
    if ($numero_nominativo > 35)
    {
    $pdf->Cell(0,100,$SESSION['nome'.$a] ,0,1,'C');
    $pdf->Cell(0,10,$SESSION['cognome'.$a] ,0,1,'C');
    }
    else
    $pdf->Cell(0,100,$nominativo,0,1,'C');
    $pdf->SetFont('Arial','B',100);
    //Stampa stringa nome agenzia
    $pdf->Cell(0,60,strtoupper($nome_agenzia),0,1,'C');
    $pdf->Output();

    [/php]

    Il problema è fare entrare le stringhe sulla stessa riga. Con il nome è cognome è facile perché si tratta di due variabili separate. Ma per il nome dell'agenzia è più complicato, perché si tratta di una stringa unica. io dovrei mettere un controllo: se la stringa supera i 35 caratteri, allora la spezza in due e va a capo.
    Sapreste indicarmi come fare?


  • User Attivo

    Utilizza la funzione substr() per dividere la stringa in due o più parti.

    [php]
    $nome_agenzia_p1 = substr($nome_agenzia, 0, 10);
    $nome_agenzia_p2 = substr($nome_agenzia, 11, strlen($nome_agenzia) - 1);
    [/php]Ciao!


  • User Attivo

    Ottimo suggerimento Sups, però così si rischia di spezzare in 2 una parola intera, e non mi sembra molto "elegante"...
    suggerirei di splittare la stringa in un array, e di contare quante parti dell'array ci vanno su una riga, per poi andare a capo.
    Esempio:
    [PHP]
    <?php
    $nome = "Nome dell'agenzia di MontemaranoTerme sul Naviglio";
    $separatore = " ";
    $max_char = 35;
    $n = 0;
    $riga1 = "";
    $riga2 = "";
    $array_nome = explode($separatore,$nome);
    for ($i=0; $i<count($array_nome); $i++)
    {
    if ((strlen($array_nome*+$n) <= $max_char)
    {
    $riga1 .= $array_nome*.$separatore;
    $n += strlen($array_nome*);
    }
    else
    $riga2 .= $array_nome*.$separatore;
    }
    [/PHP]

    Così ti costruisci 2 variabili php "$riga1" e "$riga2" senza spezzare le parole ferocemente, ma rispettando un separatore che deciderai tu.

    spero di essere stato utile.


  • User Attivo

    Mi hai preceduta sul tempo, stavo per rispondere ponendo proprio questo quesito.
    Ho provato il tuo codice ma la stringa non viene divisa su 2 righe, rimane tutta su riga1. :mmm:


  • User Attivo

    [PHP]<?php
    $nome = "Nome dell'agenzia di MontemaranoTerme sul Naviglio";
    $separatore = " ";
    $max_char = 35;
    $n = 0;
    $riga1 = "";
    $riga2 = "";
    $array_nome = explode($separatore,$nome);
    for ($i=0; $i<count($array_nome); $i++)
    {
    if ((strlen($array_nome*)+$n) <= $max_char)
    {
    $riga1 .= $array_nome*.$separatore;
    $n += strlen($array_nome*);
    }
    else
    $riga2 .= $array_nome*.$separatore;
    }
    ?>
    [/PHP]
    Avevo mancato una dannata parentesi! :arrabbiato:

    ora è ok :figo2:


  • User Attivo

    Per un punto Martin perse la K...
    Si, cos' funziona.
    Mille grazie


  • User Attivo

    quando non si provano prima le cose questo è il risultato...
    non capisco come hai fatto a fare una prova, visto che senza una parentesi da errore di sintassi...
    vabbè alla prossima!


  • User Attivo

    A dire il vero anche a me dava l'errore di sintassi e la parentesi ce l'avevo messa io stessa. Però non mi funzionava, ovvero non divideva la stringa.
    Ora funziona.
    Boh! E' uno di quei misteri della fede da accettare e basta?


  • User Attivo

    beh, ora funziona perchè ho messo la parentesi nel posto giusto,probabilmente tu l'avevi messa dove non influiva sul risultato 🙂
    Mistero risolto, buona giornata!