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

    sort array bidimensionale.

    il problema è il seguente:
    ho un array che contiene degli id (numerici).
    devo fare in modo che questo array sia ordinato in base al valore di un campo facente riferimento a una entry nel database mysql con quell'id.

    in pratica devo fare questo:
    1) per ogni valore dell'array devo fare una query mysql e recuperare il valore di un campo.
    2) creare un array bidimensionale in cui c'è l'accoppiata id<->valore.
    3) ordinare l'array bidimensionale in base al valore del secondo campo.
    4) creare un array monodimensionale con solo i valori degli id ordinati però secondo il valore del secondo campo.

    per il punto 1 so come fare e non è un problema.
    ho qualche problema sul punto 2) ma mi studio come si crea un array bidim. e lo creo senza problemi.
    ho qualche problema sui punti 3) e 4), qualcuno mi saprebbe dare una mano ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    se i dati provengono da DB, non ti conviene farlo direttametne tramite query con un giusto ORDER BY
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    sul discorso query per ogni valore avrei più di un dubbio, per il resto invece ti conviene farne uno solo

    $coppie = array();

    // loop risultato query
    $coppie[$id] = $valore;
    // fine loop

    a questo punto hai la funzione ksort che ordinerà in base all'id

    ksort($coppie);
    reset($coppie);

    resetti il puntatore e poi prendi i valori con un while(list($id,) = each($coppie)){} o con un più semplice foreach($coppie as $id => $value){}

    credo sia quello che cercavi ma rivaluta la query per ogni valore che se l'array ha più di pochi elementi diventa pesante per il server
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Originariamente inviato da andr3a
    sul discorso query per ogni valore avrei più di un dubbio, per il resto invece ti conviene farne uno solo

    $coppie = array();

    // loop risultato query
    $coppie[$id] = $valore;
    // fine loop

    a questo punto hai la funzione ksort che ordinerà in base all'id

    ksort($coppie);
    reset($coppie);

    resetti il puntatore e poi prendi i valori con un while(list($id,) = each($coppie)){} o con un più semplice foreach($coppie as $id => $value){}

    credo sia quello che cercavi ma rivaluta la query per ogni valore che se l'array ha più di pochi elementi diventa pesante per il server
    non credo che così funzioni, io devo ordinare in base a $valore ma produrre un array che contenga gli $id.

  5. #5
    Utente di HTML.it L'avatar di leno
    Registrato dal
    Sep 2007
    Messaggi
    23
    ?
    Codice PHP:
    <?php 
    $ids
    =array(34165);
    $resultArray=array();
    foreach(
    $ids as $id){
        
    // query al db
        
    $resultArray[$id]=$valore// dove $valore è il valore ottenuto della query
    }
    //dovresti avere mettiamo

    $resultArray=array(3=>204=>1516=>35=>18);

    asort($resultArray);

    print_r($resultArray);

    $idsNewArray=array();

    while(list(
    $key$value)=each($resultArray)){
        
    array_push($idsNewArray$key);
    }

    print_r($idsNewArray);
    ?>
    poco elegante, però

  6. #6
    Originariamente inviato da jos3ph
    non credo che così funzioni, io devo ordinare in base a $valore ma produrre un array che contenga gli $id.
    basta usare la sort per valore invece di quella per chiave ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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 © 2024 vBulletin Solutions, Inc. All rights reserved.