Visualizzazione risultati 1 fino 18 di 18

Discussione: [PHP] Concatenare array

  1. #1
    Guest

    Unhappy [PHP] Concatenare array

    Ciao a tutti, io ho dei form in questo modo:
    Codice PHP:
    <p><input type="text" size="60" name="nome[01]" /> <input type="text" id="prezzo" size="40" name="prezzo[01]" /></p>
    <
    p><input type="text" size="60" name="nome[02]" /> <input type="text" id="prezzo" size="40" name="prezzo[02]" /></p>
    <
    p><input type="text" size="60" name="nome[03]" /> <input type="text" id="prezzo" size="40" name="prezzo[03]" /></p>
    <
    p><input type="text" size="60" name="nome[04]" /> <input type="text" id="prezzo" size="40" name="prezzo[04]" /></p>
    Per ora sono fino al *nome/prezzo*[10]. Poi, javascript farà il suo lavoro! ^^"
    Tralasciando questo, come posso concatenare e creare un array da gestire come una singola variabile?? Vi faccio capire un po'...
    Codice PHP:
    $nome = $_POST["nome"];
    #$nome = htmlspecialchars($nome);
    #print_r($nome);

    $prezzo = $_POST["prezzo"];
    #$prezzo = str_replace("€","",$prezzo);
    #$prezzo = str_replace(",",".",$prezzo);
    #print_r($prezzo);

    $conto = array("nome"=>$nome,"prezzo"=>$prezzo);
    #print_r($conto);

    while(list($nome,$prezzo) = each($conto)) {
    echo
    $nome." costa ".$prezzo."<br />";
    }
    Il problema e che mostra questo:
    nome costa Array
    prezzo costa Array
    Invece dovrebbe mostrare:
    *nome* costa *prezzo*<br />
    *nome* costa *prezzo*<br />
    *nome* costa *prezzo*
    E così via...dopo devo fare il conto di tutto naturalmente! xD
    Spero di aver fatto capire dove sia il problema....grazie mille.
    Ciao Davide! <3
    PS. Mi serve per studio personale, non per guadagnare €uro!

  2. #2
    Guest

    Predefinito

    Prova con questo script:
    Codice PHP:
    <?php
    // recupero i dati del form
    $nome = $_POST['nome'];
    $prezzo = $_POST['prezzo'];

    // per ogni nome visualizzo il prezzo
    foreach($nome as $k => $v)
    echo
    "{$v} costa {$prezzo[$k]}";
    ?>

  3. #3
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

  4. #4
    Guest

    Predefinito

    Ok, grazie mille. Però adesso dovrei sommare tutti i numeri (prezzo) e inserirlo in una variabile.
    Consigli?? Io non ho idea di come fare in questo caso >__<

  5. #5
    Guest

    Predefinito

    array_sum().
    sIM basterebbe una piccola ricerca...

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    array_sum().

    Ciao!

    EDIT: Biccheddu, sei scorretto !

    Citazione Originalmente inviato da biccheddu
    foreach() e var+var.
    Ultima modifica di programmazioned : 12-12-2009 alle ore 18.45.10

  7. #7
    Guest

    Predefinito

    Non sono scorretto, perchè ho editato prima che tu postassi, altrimenti mi avrebbe scritto Ultima modifica di

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    No, perchè hai editato prima di un minuto.

    perchè ho editato prima che tu postassi
    Non regge, ho usato la sfera magica per quotare il tuo messaggio sopra? :D

    Ciao!

  9. #9
    Guest

    Predefinito

    Ok, grazie Federico....ho fatto una ricerca e ho trovato che end() restituisce l'ultimo array.
    Solo che, non funziona.
    Codice PHP:
    foreach($nome as $k => $v) {
    if(
    end($nome)) {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>=</td></tr>";
    }
    else {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>+</td></tr>";
    }
    }
    Dopo, con javascript se io inserisco più form e li lascio vuoti, questi vengono conteggiati poi nel template. Non c'è un modo per evitare questa cosa?? ^^"
    Grazie mille!! <3

    PS. Who is sIM?? I'm Davide! **

  10. #10
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Invece di tornare a $nomi, non è più comodo trattare il già definito $conti?

    end() non controlla che la corrente sia l'iterazione finale, ma sposta il puntatore all'ultimo elemento dell'array e ne restituisce il valore, o false se il vettore è vuoto.
    Nel tuo caso $nome contiene sempre almeno un valore, quindi la condizione risulterà sempre true.

    Puoi invece verificare che una variabile contatore sia uguale o maggiore del numero di elementi contenuti nell'array, oppure che $k sia uguale alla chiave che hai abbinato all'ultimo nome[] nel form.

    Dopo, con javascript se io inserisco più form e li lascio vuoti, questi vengono conteggiati poi nel template.
    Beh? Filtra i valori vuoti nel ciclo.

    Ciao!
    Ultima modifica di programmazioned : 12-12-2009 alle ore 20.26.10

  11. #11
    Guest

    Predefinito

    Non funziona....
    Codice PHP:
    if($k > count($v)) {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>=</td></tr>";
    }
    else {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>+</td></tr>";
    }
    Perché con quattro valori si comporta così:
    +
    = <--- qui dovrebbe andare automaticamente +
    +
    + <--- qui dovrebbe andare =
    Grazie mille!! <3
    2) Non funziona
    Ultima modifica di sIM : 12-12-2009 alle ore 20.37.18

  12. #12
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Se fai il controllo su $k, devi verificare che sia uguale a l'ultimo nome[], visto che contiene le chiavi dichiarate nel form.

    Codice PHP:
    $j = 1;
    foreach(
    $nome as $k => $v){
    if(
    $j == count($nome))
    ...
    $j++;
    }
    Codice PHP:
    foreach($nome as $k => $v){
    if(
    $k == '04') //se l'ultimo campo si chiama nomi[04]
    ...
    }
    +
    = <--- qui dovrebbe andare automaticamente +
    +
    + <--- qui dovrebbe andare =
    Scusa, non ho capito che vuol dire :D

    Ciao!
    Ultima modifica di programmazioned : 12-12-2009 alle ore 22.30.06 Motivo: j inizializzata a 1

  13. #13
    Guest

    Predefinito

    Niente da fare, alla fine mostra il + invece dell'= (uguale)
    Quel quote, era per farti capire cosa mostrava ed invece come doveva essere! XD

  14. #14
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Scusa, ho sbagliato: j va inizializzata ad 1, non a 0.

    Ciao!

  15. #15
    Guest

    Predefinito

    Non cambia niente, visualizza sempre tutti con il +
    Codice PHP:
    $j = 1;
    foreach(
    $nome as $k => $v) {
    if(empty(
    $v)) continue;
    if(
    $j == count($nome)) {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>=</td></tr>";
    $j++;
    }
    else {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>+</td></tr>";
    }
    }

  16. #16
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    j va incrementata fuori dall'if, quindi sposta
    Codice PHP:
    $j++;
    prima della graffa di chiusura del foreach.

    Ciao!

    EDIT, questo non va bene:
    Codice PHP:
    if(empty($v)) continue;
    Il ciclo termina al primo elemento vuoto.
    Ultima modifica di programmazioned : 12-12-2009 alle ore 22.46.05

  17. #17
    Guest

    Predefinito

    .-. mettendolo fuori non funziona lo stesso >.<
    Codice PHP:
    foreach($nome as $k => $v) {
    if(empty(
    $v)) continue;
    if(
    $j == count($nome)) {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>=</td></tr>";

    }
    else {
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>+</td></tr>";
    }
    $j++;
    }
    Riguardo quello (continue;) vedi che ha funzionato fino ad ora....
    Non ho avuto problemi =)

  18. #18
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Ok, ho studiato e capito il problema: il risultato di count() è falsato dagli elementi vuoti, che quindi vanno eliminati prima del ciclo con array_filter().

    Codice PHP:

    $nome
    = array_filter($nome);

    $j = 1;

    foreach(
    $nome as $k => $v) {

    if(
    $j == count($nome))
    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>=</td></tr>";

    else

    echo
    "<tr><td class=\"uno\">{$v}</td><td class=\"due\">{$prezzo[$k]} €</td><td>+</td></tr>";

    $j++;

    }
    Ho anche provato e funziona.

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •