Visualizzazione risultati 1 fino 11 di 11

Discussione: Ricavare key in base al value in un array.

  1. #1
    Guest

    Predefinito Ricavare key in base al value in un array.

    Ciao a tutti ragazzi, vorrei sapere se è possibile ricavare la key di un elemento di un array conoscendo il value.

    Mi spiego meglio, ho un array fatto così:
    Codice PHP:
    $array = array(
    'prova' => 'testo_prova',
    'prova_2' => 'testo_prova_2',
    );
    E' possibile stampare a video prova o prova 2 utilizzando i valori testo_prova o testo_prova_2?

    Per esempio, ho un valore passato tramire GET che è test_prova e devo fare una query con la key, come potrei fare se è possibile?

    Grazie in anticipo

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

    Predefinito

    array_search.
    Ciao!

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    uhm, la normale array_search() non ti va bene?

    Un'alternativa, se sei sicuro che l'associatività si bigettiva e l'array non sia troppo grosso, può essere quella di invertire tutto con array_flip(), ed a quel punto accedi direttamente.

  4. #4
    Guest

    Predefinito

    Come ho fatto a non trovarlo nella documentazione?

    Grazie programmazioned

    Edit, in poche parole ho un record nel DB con diversi valori, che poi vengono divisi in un array tramite explode(), che poi prenderanno il valore in un altro array ancora tramite key.

    Poi dovrò eseguire una query sicuramente con una LIKE in base a quello passato via GET, che saranno delle parole, nel DB e mostrare i risultati dove c'è quella key
    Ultima modifica di biccheddu : 29-07-2009 alle ore 21.47.45

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

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Edit, in poche parole ho un record nel DB con diversi valori, che poi vengono divisi in un array tramite explode(), che poi prenderanno il valore in un altro array ancora tramite key.

    Poi dovrò eseguire una query sicuramente con una LIKE in base a quello passato via GET, che saranno delle parole, nel DB e mostrare i risultati dove c'è quella key
    Se array_search va bene, ignora il suggerimento di dreadnaut: era evidentemente proposto come alternativa, comoda ma non molto efficiente.

    Ciao!
    Ultima modifica di programmazioned : 29-07-2009 alle ore 21.53.43

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Inefficiente assai, sia chiaro: solo se l'array non è grosso e ti è utile averlo invertito. L'avevo scritto solo perché pensavo non volesse usare array_search.

  7. #7
    Guest

    Predefinito

    Io ho un array con degli elementi presi da una tabella formato da $array[$key_db] = $value_db;

    Poi faccio una query in un'altra tabella e ottengo il valore facendo $risultato = $array[$record_db];

    Successivamente, dovrò fare una query per fare una ricerca con $risultato che sarà copme $value_db.

    Ho incasinato e basta vero?

  8. #8
    Guest

    Predefinito

    Ma ad esempio:

    Codice PHP:
    foreach($array as $key=>$value){

    echo
    "Chiave ".$key." Valore ".$value;

    }
    oppure

    Codice PHP:
    extract($array);
    Non so, però forse ti possono servire :)

  9. #9
    Guest

    Predefinito

    Allora, io in poche parole faccio questo:

    All'inizio dello script ho:

    Codice PHP:
    $sql = 'SELECT * FROM ' . BANDS_GENRES_TABLE;
    if (!(
    $result = $db->sql_query($sql, false, 'bands_genres_')))
    {
    message_die(GENERAL_ERROR, 'Could not query bands genre', '', __LINE__, __FILE__, $sql);
    }
    while(
    $row = $db->sql_fetchrow($result))
    {
    $genre[$row['id']] = $row['name'];
    }
    Poi, faccio la seguente query:

    Codice PHP:
    $sql = "SELECT * FROM " . BANDS_TABLE . " WHERE band_id = '" . $bands_id . "'";
    if (!
    $result = $db->sql_query($sql))
    {
    message_die(GENERAL_ERROR, "Couldn't retrieve band data", '', __LINE__, __FILE__, $sql);
    }
    $row = $db->sql_fetchrow($result);

    $genre_array = explode(' ', $row['band_genre']);
    foreach(
    $genre_array as $id => $value)
    {
    $name = $genre[$value];
    $u_genre = ($board_config['url_rw'] == '1') || (($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS)) ? append_sid(str_replace ('--', '-', 'band-genre-' . make_url_friendly($name) . '.html')) : append_sid('' . U_BANDS . '?genre=' . make_url_friendly($name));
    $template->assign_block_vars('list_band_genre', array(
    'URL' => $u_genre,
    'NAME' => $name,
    ));
    }
    Quindi genero un link in base al value della'array $genre.

    Siccome devo fare il motore di ricerca, dovrà fare (per svariati motivi) una query in base al valore passato via GET, che in questo caso è un valore dell'array.

    Però, dato che nella seconda query che faccio (dove faccio l'explode()) il record è tipo:
    Codice:
    1 2 3 4 5
    Devo fare una LIKE con la key del valore passato via GET.

    Capito ragazzi?

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

    Predefinito

    Ricapitolo, vediamo se ho capito.

    Tu operi su due tabelle, t1 e t2, e vorresti fare questo:

    1. estrai tutti i record da t1
    2. dai risultati componi l'array $genre, dove gli indici corrispondono a t1.id e i valori a t1.name;
    3. estrai i record da t2 conoscendo t2.band_id (passato via querystring);
    4. t2.band_genre contiene alcuni t1.id separati da uno spazio, chiami explode() e per ogni elemento prendi il corrispondente t1.name da $genre;
    5. utilizzi i nomi ottenuti per generare stringhe da passare ad un template engine.


    Se è corretto, dopo un appunto su quanto sia contorta la tua mente, ti farà piacere sapere che tutto questo potrebbe forse essere esprimibile attraverso una query di tipo join

    Se non lo è ti prego di correggermi, ma array_search dovrebbe andar bene.

    Ciao!
    Ultima modifica di programmazioned : 30-07-2009 alle ore 21.09.53

  11. #11
    Guest

    Predefinito

    Le JOIN le conosco e ora non ne ho bisogno, perchè fino al punto 4 è perfetto, il quinto è giusto, ma non c'entra con il mio problema.

    Ora, siccome genero degli url che saranno di tipo genre=Nome (dove nome è il Value di una Key dell'array $genre) e non genre=1, ho chiesto come potrei fare per eseguire una query in base al valore passato via GET (genre).

    Dato che nella t2 il record è composto dalle key separate da uno spazio, non posso fare un WHERE diretto, ma una LIKE in base alla Key.

    Non è difficile da capire

Regole di scrittura

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