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

    Piccolo dilemma sprintf.. qualcuno mi aiuta a capire

    Ho costruito una classe, un metodo al suo interno è fatto così..
    Codice PHP:
    // Crea elenco autori
    public function ElencoAutoriSelect()
    {
        include 
    "../funzioni/db/connection.php"
        try
        {
            
    $sql 'SELECT id, nome, cognome, motto, link, linkimg FROM autori ORDER BY cognome DESC, nome DESC';
            
    $result $pdo->query($sql);
        }
        catch (
    PDOException $e)
        {
            
    $error 'Error: ' $e->getMessage();
            include 
    'ERRORDB/outputpage.php';
            exit();
        }     
        foreach (
    $result as $row)
        {
            
    $autori[] = array(
                    
    'id' => $row['id'],
                    
    'nome' => $row['nome'],
                    
    'cognome' => $row['cognome']
                    );
        }
        
    $pattern '<option value="%s">%s%s</option>';
        foreach (
    $autori as $autore) {
            
    $autore[] = sprintf($pattern$autore["id"], $autore["nome"], $autore["cognome"]);
        }
        
    $autoretot implode(' '$autore);
        return 
    $autoretot;

    C'è sempre qualcosa che non va..
    Ecco il risultato:
    codice:
    <select>1 Giacomo Gigliotti <option value="1">GiacomoGigliotti</option></select>
    Non capisco cosa generi quella parte prima di option, e non capisco ancora perchè quando richiamo il metodo mi da solo un risultato.
    Ultima modifica di k.b; 08-09-2015 a 12:25

  2. #2
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Premetto che mi sembra esagerato usare sprintf per una cosa così banale (ma questa è solo una mia opinione), questa parte del codice si incasina perchè utilizzi "autore" sia come variabile di iterazione sel foreach sia come array di output.

    Quote Originariamente inviata da otto9due Visualizza il messaggio
    Ho costruito una classe, un metodo al suo interno è fatto così..
    Codice PHP:
        foreach ($autori as $autore) {
            
    $autore[] = sprintf($pattern$autore["id"], $autore["nome"], $autore["cognome"]);
        } 
    In pratica ad ogni ciclo dl foreach, $autore viene impostata come una "riga" dell'array "autori", poi gli accodi una stringa risultato del tuo sprintf, ma al ciclo successivo il foreach reimposta $autori ai valori successivi dell'array $autori.
    Ecco perchè, indipendentemente dal contenuto di $autori, $autore avrà solo una serie di valori.

    Prova un cambiamento banale:

    Codice PHP:
        foreach ($autori as $a) {
            
    $autore[] = sprintf($pattern$a["id"], $a["nome"], $a["cognome"]);
        } 

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.