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

    stmpare un valore a seconda del recod

    Sto imparando come funziona il PHP, quindi scusatemi se vi pongo delle domande banali.
    Ho questo codice.
    Codice PHP:
        $cat_titles4show '' ;
        
    $cids explode"," $event->categories ) ;
        
    $counter 0;
        foreach( 
    $cids as $cid ) {
            
    $cid intval$cid ) ;
            if (isset(
    $this->categories[$cid])) {
                
    $cat_titles4show .= $this->text_sanitizer_for_show$this->categories$cid ]->cat_title ) ;
                
    $counter++;
                if (
    $counter == 3) {
                    
    $cat_titles4show .= "
    "
    ;
                    
    $counter 0;
                } else {
                    
    $cat_titles4show .= " | ";
                }
            }
        }
        if( 
    $cat_titles4show != '' $cat_titles4show substr$cat_titles4show , -) ; 
    Se non ho capito male, questo è il funzionamento: la variabile da stampare è cat_titles4show.
    Prendo la colonna cids (che ha il formato, ad esempio, "0001,0003,0002,0008"), elimino la virgola e mi ritrovo i valori "0001", "0003", "0002", "0008". Per ognuno dei valori ("0001", ecc...), viene stampato il record contenuto nella colonna "cat_title". Ogni 3 record, piazzo un tag
    . In caso contrario, piazzo " | ".
    Ora però vorrei che se cids ha il valore "0001", venga stampato "<h1>nome categoria1</h1>"; se ha il valore "0002", venga stampato "

    nome categoria2</p>" ecc...
    Come devo fare?

    Grazie!
    OZoz: libri on line gratis!
    http://www.ozoz.it

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503

    Re: stmpare un valore a seconda del recod

    Codice PHP:
        $cat_titles4show '' ;
        
    $cids explode"," $event->categories ) ;
        
    $counter 0;
        foreach( 
    $cids as $cid ) {
            
    $cid intval$cid ) ;
            if (isset(
    $this->categories[$cid])) {
                if(
    $cid == "0001") {
                    
    $cat_titles4show .= "<h1>".$this->text_sanitizer_for_show$this->categories$cid ]->cat_title )."</h1>" ;
                }
                else {
                    
    $cat_titles4show .= "

    "
    .$this->text_sanitizer_for_show$this->categories$cid ]->cat_title )."</p>" ;
                }
                
    $counter++;
                if (
    $counter == 3) {
                    
    $cat_titles4show .= "
    "
    ;
                    
    $counter 0;
                } else {
                    
    $cat_titles4show .= " | ";
                }
            }
        }
        if( 
    $cat_titles4show != '' $cat_titles4show substr$cat_titles4show , -) ; 
    Comunque explode() non elimina la virgola, il primo parametro che gli passi (nel tuo caso la virgola) indica un delimitatore, il secondo una stringa.
    La funzione prende la stringa e mette gli elementi divisi dal delimitatore dentro un array.

  3. #3
    Grazie!

    Ho aggiunto un elseif:

    Codice PHP:
    $cat_titles4show '' ;
        
    $cids explode"," $event->categories ) ;
        
    $counter 0;
        foreach( 
    $cids as $cid ) {
            
    $cid intval$cid ) ;
            if (isset(
    $this->categories[$cid])) {
                if(
    $cid == "0001") {
                    
    $cat_titles4show .= "<h1>".$this->text_sanitizer_for_show$this->categories$cid ]->cat_title )."</h1>" ;
                } elseif(
    $cid == "0001") {
                    
    $cat_titles4show .= "<h2>".$this->text_sanitizer_for_show$this->categories$cid ]->cat_title )."</h2>" ;
                } else {
                    
    $cat_titles4show .= "".$this->text_sanitizer_for_show$this->categories$cid ]->cat_title )."" ;
                }
                
    $counter++;
                if (
    $counter == 3) {
                    
    $cat_titles4show .= "
    "
    ;
                    
    $counter 0;
                } else {
                    
    $cat_titles4show .= " | ";
                }
            }
        }
        if( 
    $cat_titles4show != '' $cat_titles4show substr$cat_titles4show , -) ; 
    Comunque explode() non elimina la virgola, il primo parametro che gli passi (nel tuo caso la virgola) indica un delimitatore, il secondo una stringa. La funzione prende la stringa e mette gli elementi divisi dal delimitatore dentro un array.
    Grazie per la delucidazione.
    Un'altra cosa. La stringa è del tipo "0001,0003,0002,0008" (i valori numerici vanno da 0001 a 0015, possono trovarsi in ordine diverso e possono essercene uno, due, tre... quindici). Esiste una funzione per inserire gli elementi divisi dalla virgola dentro un array ordinandoli in un particolare modo? Ad esempio, vorrei che, qualunque fosse il contenuto della stringa,si seguisse questo ordine:

    0004
    0008
    0003
    0005
    0001
    ...
    OZoz: libri on line gratis!
    http://www.ozoz.it

  4. #4
    Mmmm! Mi sa che non è su questa parte di codice che devo agire.
    OZoz: libri on line gratis!
    http://www.ozoz.it

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    L'elseif non verrà mai eseguito.
    Codice PHP:
    if($cid == '0001')
    {
        
    //codice se $cid è pari a 0001
    }
    elseif (
    $cid == '0001')
    {
        
    //codece che non verrà mai eseguto

    Non puoi mettere 2 controlli uguali, verrà eseguito sempre e solo il primo, l'elseif viene preso in considerazione solo se le condizioni precedenti sono risultate false, quindi ti trovi 2 situazioni diverse, che però portano allo stesso risultato:
    1) $cid è pari a 0001 -> la condizione dell'if è vera e viene eseguito il codice associato, fine dei controlli, l'elseif viene saltato perché una condizione precedente è vera

    2) $cid è diverso da 0001 -> la condizione è falsa, quindi non viene eseguito né l'if né l'elseif.

  6. #6
    Errore di battitura Grazie!
    Hai suggerimenti riguardo la possibilità di elencare $cat_titles4show in base ad un ordine prestabilito di $cids?
    In pratica, così com'è ora, se $event->categories è del tipo "0008,0004,0001,0006", ottengo le quattro stringhe $cids "0008", "0004", "0001" e "0006" che vengono elaborate ($cid) e stampate ($cat_titles4show) in questo preciso ordine. Ma se io volessi, ad esempio, che, indipendentemente dal valore di $event->categories, le $cids venissero elaborate seguendo questo ordine:

    1) 0004;
    2) 0005;
    3) 0001;
    4) 0008;
    5) 0002;
    6) 0007;
    ecc...

    come dovrei fare?
    OZoz: libri on line gratis!
    http://www.ozoz.it

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Penso che l'unica possibilità sia costruirti una funzione fatta appositamente.
    Il primo algoritmo che mi viene in mente è questo:
    - gli passi l'array da ordinare secondo la tua esigenza
    - crei un array vuoto
    - scansioni l'array da ordinare una prima volta fino a trovare il cid 0004 e lo metti nell'array creato
    - scansioni di nuovo in cerca di 0005 e una volta trovato lo aggiungi all'array
    - così via per gli altri cid
    - alla fine fai un return dell'array così costruito

  8. #8
    Per il momento, sono ancora troppo alle prime armi per considerare quello che hai scritto diverso dall'arabo
    Ti ringrazio per l'aiuto e spero, più in là, di raggiungere una conoscenza del PHP sufficiente a seguire il tuo consiglio
    OZoz: libri on line gratis!
    http://www.ozoz.it

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.