- Home
- Categorie
- Coding e Sistemistica
- PHP
- Spezzare stringhe
-
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?
-
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!
-
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.
-
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.
-
[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!ora è ok
-
Per un punto Martin perse la K...
Si, cos' funziona.
Mille grazie
-
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!
-
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?
-
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!