Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Problema array!!!...aiutatemi...

    Sarà che mi sono fatto prendere dal nervoso ormai!(Il mio pc sta rischiando seriamente ) ma non riesco a capire cosa non va in questo codice:

    Codice PHP:
    <?php 
        $max_char
    =500;
        
    $last_space=array();
        
    $stringa=array();
        
    $stringa_ok=array();
    while (
    $news=mysql_fetch_assoc($result)){

        
    $lungh=strlen($news['DESCRIZIONE']);
        
    $divisione=bcdiv($lungh,$max_char0);
        
    $div_int=$lungh%$max_char;
        echo 
    $lungh."<br \>";
        echo 
    $divisione."<br \>";
        echo 
    $div_int."<br \>";
        if (
    $divisione 1){
            
    $pagine=$divisione;
                if (
    $div_int!=0){
                    
    $pagine++;}
            
    $i=0;
            while (
    $i<$pagine){
            if (
    $i==0){
            
    $stringa['$i']=substr($news['DESCRIZIONE'],0,$max_char);
            
    $last_space['$i']=strrpos($stringa," ");
            
    $stringa_ok['$i']=substr($stringa,0,$last_space['$i']);
            echo 
    "Stringa ";
            echo 
    $i."
    "
    ;
            echo
    "Ultimo carattere ";
            echo 
    $last_space['$i']."
    "
    ;
            
    $i++;}
            else{
            
    $prec=$i-1;
            
    $inizio=$last_space['$prec'];
            
    $max_char=$inizio+$max_char;
            
    $stringa['$i']=substr($news['DESCRIZIONE'],$inizio,$max_char);
            
    $last_space['$i']=strrpos($stringa," ");
            
    $stringa_ok['$i']=substr($stringa,$inizio,$last_space['$i']);
            echo 
    "Stringa ";
            echo 
    $i."
    "
    ;
            echo
    "Primo carattere ";
            echo 
    $inizio."
    "
    ;
            echo
    "Ultimo carattere ";
            echo 
    $last_space['$i']."
    "
    ;
            
    $i++;
            }
            }
        }
        }
        
    ?>
    Praticamente il codice dovrebbe dividere la stringa che gli arriva ($news['....) ogni 500 caratteri con un controllo per non troncare l'ultima parola...quindi diminuisce in caso i caratteri quando incontra l'ultimo spazio...

    gli echo dovrebbero visualizzare in base alla stringa che ho (è formata da 1100 caratteri)
    Stringa 0
    Ultimo carattere 496
    Stringa 1
    Primo carattere 496
    Ultimo carattere 996
    Stringa 2
    Primo carattere 996
    Ultimo carattere 1100


    e invece NO!!! MI VISUALIZZA QUESTO:
    Stringa 0
    Ultimo carattere
    Stringa 1
    Primo carattere
    Ultimo carattere
    Stringa 2
    Primo carattere
    Ultimo carattere

    quindi non riesce a leggere il contenuto di $last_space['$i'], $ inizio e quindi la stringa non me la divide in modo corretto....
    Qualcuno riesce a trovare dove sta l'errore???

    aiutatemi per favore....(anzi...aiutate il mio pc :quote: )

  2. #2
    Non lo so, ma ...
    Senza poter provare, sono andato ad occhio.
    Provi tu?
    Codice PHP:
    <?php
        $max_char
    =500;
        
    $last_space=array();
        
    $stringa=array();
        
    $stringa_ok=array();
        while (
    $news=mysql_fetch_assoc($result)){
            
    $DescrLetta $news['DESCRIZIONE'];
            
    $lungh=strlen($DescrLetta);
            
    $divisione=bcdiv($lungh,$max_char0);
            
    $div_int=$lungh $max_char;
            echo 
    $lungh."
    "
    ;
            echo 
    $divisione."
    "
    ;
            echo 
    $div_int."
    "
    ;
            if (
    $divisione 1){
                
    $pagine=$divisione;
                if (
    $div_int!=0){
                    
    $pagine++;
                }
                
    $i=0;
                while (
    $i<$pagine){
                    if (
    $i==0){
                        
    $stringa[$i]=substr($DescrLetta,0,$max_char);
                        
    $last_space[$i]=strrpos($stringa," ");
                        
    $stringa_ok[$i]=substr($stringa,0,$last_space[$i]);
                        echo 
    "Stringa ";
                        echo 
    $i."
    "
    ;
                        echo
    "Ultimo carattere ";
                        echo 
    $last_space[$i]."
    "
    ;
                        
    $i++;
                    }
                    else {
                        
    $prec=$i-1;
                        
    $inizio=$last_space[$prec];
                        
    $max_char=$inizio+$max_char;
                        
    $stringa[$i]=substr($DescrLetta,$inizio,$max_char);
                        
    $last_space[$i]=strrpos($stringa," ");
                        
    $stringa_ok[$i]=substr($stringa,$inizio,$last_space[$i]);
                        echo 
    "Stringa ";
                        echo 
    $i."
    "
    ;
                        echo
    "Primo carattere ";
                        echo 
    $inizio."
    "
    ;
                        echo
    "Ultimo carattere ";
                        echo 
    $last_space[$i]."
    "
    ;
                        
    $i++;
                    }
                }
            }
        }
        
    ?>
    Ho messo interi gli indici degli array, invece che stringhe e poco altro.
    In teoria dovrebbe andare ... in pratica, beh, a te la sentenza!

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  3. #3
    Utente di HTML.it L'avatar di kansuke
    Registrato dal
    Apr 2004
    Messaggi
    350
    Guarda non so bene che cosè che non ti funziona, ma ad occhio mi sembra che tu stia scrivendo molto più del necessario, stripos consente anche di settare l'offset (il primo carattere prima di effettuare la ricerca).

    Codice PHP:
    <?PHP
    $stringa
    ="In seguito alla separazione dei genitori (la madre dal 1792 convive con il colto e ricchissimo Carlo Imbonati, prima in Inghilterra, poi in Francia), Alessandro Manzoni dal 1790 al 1803 viene educato in collegi religiosi, prima dal 1796 al 1798 presso il collegio Sant'Antonio dei padri Somaschi a Lugano, poi presso i Barnabiti. Pur essendo insofferente di tale pedantesca educazione, della quale denunciò i limiti anche disciplinari, e pur venendo giudicato uno studente svogliato, egli, da tali studi deriva una buona formazione classica e un gusto letterario. A quindici anni sviluppa una sincera passione per la poesia e scrive due notevoli sonetti. Il nonno materno gli insegna a trarre dall'osservazione del reale, conclusioni rigorose ed universali.Il giovane Manzoni dal 1803 al 1805 vive con l'anziano don Pietro, dedica buona parte del suo tempo alle ragazze e al gioco d'azzardo, ma ha modo anche di frequentare l'ambiente illuministico dell'aristocrazia e dell'alta borghesia milanese. Il compiacimento neoclassico del tempo gli ispira le prime esperienze poetiche, modulate sull'opera di Vincenzo Monti, idolo letterario del momento. Ma, oltre questi, il Manzoni si volge a Giuseppe Parini, portavoce degli ideali illuministici, nonché dell'esigenza di moralizzazione. A questo periodo si devono Il trionfo della libertà, Adda, I quattro sermoni che recano l'impronta di Monti e di Parini, ma anche l'eco di Virgilio e di Orazio. Nel 1805 raggiunge la madre ad Auteuil, dove passa due anni, partecipando al circolo letterario dei cosiddetti ideologi, filosofi di scuola ottocentesca, tra i quali si fa molti amici, in particolare Claude Fauriel e ha modo di apprendere le teorie volterriane. Alessandro si imbeve della cultura francese classicheggiante in arte, scettica e sensista in filosofia (i sensi sono alla base della conoscenza; l'illuminismo è la critica razionale della realtà; lotta al pregiudizio e alla tradizione derivata dall'autorità; i problemi religiosi non si basano sull'esperienza, ma sulla superstizione) ed assiste all'evoluzione del razionalismo verso posizioni romantiche.";

    $max_char=500;
    $curr_pos=0;

    echo 
    "lunghezza stringa ".strlen($stringa)."

    "
    ;
    while (
    $curr_pos<strlen($stringa)){ 
        
    //cerco il primo spazio disponibile per il taglio
        //se tolgo il +1 incomincia a cercare da prima dello spazio e trova sempre los tesso impallandosi
        
    $src_cut=    stripos ($stringa " "$curr_pos+$max_char+1);
        
    //mi assicuro che stripos non "fuoriesca" dalla stringa e se lo fa segnalo il prossimo taglio allpultimo carattere
        
    $next_cut=$src_cut $src_cut strlen($stringa);
        
    //faccio un po di eco come mi pare
        
    echo $curr_pos."-".$next_cut." \"".substr($stringa$curr_pos$next_cut-$curr_pos)."\"

    "
    ;
        
    //setto la posizione corrente all'ultimo taglio
        
    $curr_pos=$next_cut;
    }

    ?>
    Poi se vuoi fare il Push dei valori negli array non c'è problema basta http://it2.php.net/function.array-push

    Edit: questo codice da un codice di errore perchè naturalmente l'offset diventa più grande della lunghezza della stringa stessa, basta metterci un if, tuttavia a parte il messaggio strpos fallisce e il controllo assegna $next_cut il valore di strlen($stringa)
    "Hanno chiuso le mandrie nelle stalle
    perchè liberi siamo fino all'alba."
    R. Kipling

  4. #4
    homezappa: non va...anche era proprio questo il problema...anche se passo gli indici come numeri e non come stringhe non va...non mi memorizza in quegli array ne l'ultimo carattere ne il primo del taglio...

    quello di kansuke invece va... xo non ho capito bene il discorso del controllo(if)...cioè dovrei controllare che $curr_pos+$max_char+1 non sia minore di strlen($string)...e in caso? assegnare direttamente a $src_cut strlen($stringa)?????

  5. #5
    Utente di HTML.it L'avatar di kansuke
    Registrato dal
    Apr 2004
    Messaggi
    350
    Scusa la lentezza della risposta.

    Puoi agire in due modi.
    Se si verifica la situazione di cui parlavo, stripos va in errore, tuttavia l'operatore ternario che si occupa di verificare il valore di $next_cut lo intercetta al livello di funzionalità non succede nulla, lo script funziona correttamente.
    Però rimane la visualizzazione del messaggio di erroe.

    Puoi fare in modo che l'errore non venga visualizzato o controllare precedentemente che, come dicevi, $curr_pos+$max_char+1 non sia minore di strlen($string), in quel caso appunto la ricerca del nextcut non serve, visto che è impossibile sia necessario tagliare la stringa nuovamente essendo inferiore ai 500 caratteri, a quel punto l'ultimo taglio è strlen($stringa).
    Verrebbe comunque risolto dal ternario ma evitando di fare la ricerca quando non necessaria eviti il massaggio di errore.
    "Hanno chiuso le mandrie nelle stalle
    perchè liberi siamo fino all'alba."
    R. Kipling

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.