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

    array multidimensionale e recupero valori e chiavi

    Salve ragazzi. Un gran bel problema quello che mi si è appena presentato. Passo a spiegare senza perdere tempo.

    Ho un array multidimensionale così composto:
    Codice PHP:
    $_target[0]['name'] = 'Uomo';
    $_target[0]['id'] = 0;
    $_target[1]['name'] = 'Donna';
    $_target[1]['id'] = 1;
    $_target[2]['name'] = 'Unisex';
    $_target[2]['id'] = 2;
    $_target[3]['name'] = 'Bambino';
    $_target[3]['id'] = 3
    Ho usato questo come esempio ma in realtà l'array è formato dalla coppia id - nome estratti da un db (quindi non mi dite di cambiare la struttura).

    Il problema è questo: quando vado a costruire il modulo utilizzo un menu select formato in questo modo:
    <select name="target">
    <option value = "$target[$i]['id']">$target[$i]['name']</option>
    </select>

    Ora succede che nel momento in cui vado a riepilogare i dati inseriti stampando il valore della variabile $_POST['target'] mi viene stampato l'id e non il nome. Domandona: Come faccio a ricavare il nome? In un array così semplice potrei benissimo fare qualcosa del genere

    Codice PHP:
    for ($i $i count($target) ; $i++ )
       {
          if (
    $target[$i]['id'] == $_POST['target'])
            {
               
    $targetID $target[$i]['id'];
               
    $targetName $target[$i]['name'];
            }
       } 
    Questa soluzione, però, mi sembra poco elegante ed inoltre dispendiosa su grandi array. Soluzioni? Grazie mille! Ciao!

  2. #2
    credo che per il tipo di array che hai, quella da te adottata sia l'unica soluzione.... se vuoi fare la cosa in modo più pulito devi necessariamente cambiare la struttura dell'array facendolo diventare monodimensionale. mettendo l'id come indice dell'array anzichè come elemento, l'array lo costruisci sempre estraendo i dati dal database ma in modo simile a questo:

    Codice PHP:
    $rs=mysql_query("SELECT id, nome FROM tabella"$dbLink);
    while(
    $row=mysql_fetch_array($rs))
        
    $_target[$row['id']] = $row['nome'];

    unset(
    $row);
    mysql_free_result($rs); 
    e così ottieni qualcosa del genere:

    Codice PHP:
    $_target[0] = 'Uomo'
    $_target[1] = 'Donna'
    $_target[2] = 'Unisex'
    $_target[3] = 'Bambino'
    a questo punto, quando fai il riepilogo, non devi fare altro che:

    Codice PHP:
    print $_target[$_POST['target']]; 
    le funzioni di ricerca all'interno degli array bidimensionali che richiedono il confronto di uno degli elementi più annidati, richiedono sempre una scansione dell'array...

  3. #3
    Lo so che potrei utilizzare la soluzione da te adottata ma non mi piace molto! Inoltre non saprei come fare a gestirla con smarty! Vabbè, vorrà dire che farò la scansione! Grazie cmq per l'aiuto! Ciao!

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.