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

    Ordinare array in base al secondo

    Salve, ho un array in questo modo (stampo un var_dump):

    codice:
    array(17) { [245]=> string(2) "97" [454]=> string(2) "46" [249]=> string(2) "37" [253]=> string(2) "10" [451]=> string(1) "6" [45]=> string(1) "3" [234]=> string(1) "2" [16]=> string(1) "2" [316]=> string(1) "1" [320]=> string(1) "1" [328]=> string(1) "1" [110]=> string(1) "1" [357]=> string(1) "1" [310]=> string(1) "1" [221]=> string(1) "1" [370]=> string(1) "1" [238]=> string(1) "1" }
    Poi ho un secondo array (stampo un var_dump):

    codice:
    array(4) { [0]=> array(2) { ["num"]=> string(2) "48" ["category"]=> string(3) "245" } [1]=> array(2) { ["num"]=> string(2) "24" ["category"]=> string(3) "249" } [2]=> array(2) { ["num"]=> string(2) "16" ["category"]=> string(3) "454" } [3]=> array(2) { ["num"]=> string(1) "9" ["category"]=> string(3) "253" } }
    Ora ho bisogno che il primo array sia ordinato secondo il secondo array, in ordine di category.

    Cerco di far capire meglio con un esempio:

    Il primo array verrebbe mostrato in questo modo:
    245
    454
    46 ecc..

    Ora vorrei che venisse ordinato in questo modo:
    245
    249
    454
    ecc.

    Spero che sia stato abbastanza chiaro.

    Grazie

  2. #2
    1) ordini il secondo array con sort o usort

    1.a) crei due array vuoti: sortedArray e buffer

    2) scorri il secondo array

    3) inserisci in buffer tutti gli elementi del primo array che appartengono all'elemento i del secondo array

    4) ordini buffer (se ce n'è bisogno) con sort o usort

    5) ricopi gli elementi di buffer in sortedArray e svuoti buffer

    6) ritorni al punto 3 finchè non hai visitato tutti gli elementi del secondo array

    7) in sortedArray avrai gli elementi "ordinati" per categoria

    detto questo, due appunti

    1) se ordini tra di loro gli elementi del primo array con sort/usort, allora l'array buffer non ti serve

    2) se non ti servono gli elementi del primo array ordinati tra di loro, l'array buffer non ti serve

    3) probabilmente l'array buffer non serve ad un ca**o, ma mi piaceva metterlo

    4) per tutte le idiozie che ho detto, abbi pietà che ho un mal di testa da record stamattina. W il lunedì!!
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Grazie per la risposta.
    Ma credo che se riesci a farmi un esempio mi semplifichi la vita di molto.
    Sempre se vuoi, lunedi permettendo

  4. #4
    come si fa a capire in array uno quali sono gli elementi di una categoria i?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    In questo array:

    codice:
    array(17) { [245]=> string(2) "97" [454]=> string(2) "46" [249]=> string(2) "37" [253]=> string(2) "10" [451]=> string(1) "6" [45]=> string(1) "3" [234]=> string(1) "2" [16]=> string(1) "2" [316]=> string(1) "1" [320]=> string(1) "1" [328]=> string(1) "1" [110]=> string(1) "1" [357]=> string(1) "1" [310]=> string(1) "1" [221]=> string(1) "1" [370]=> string(1) "1" [238]=> string(1) "1" }
    L'id 245, 454, 249, 253, 451, 45, 234, 16, 316, 320, 328, 110, 357, 310, 221, 370 e 238 sono le categorie.

    Quindi l'array dovrebbe essere ordinato in questo modo (in base al secondo).
    nel secondo ci sono gli id, quindi:
    245
    249
    454
    253
    451
    45
    234
    16
    316
    320
    328
    110
    357
    310
    221
    370
    238

    Scusami ma non riesco a spiegarmi meglio

    Grazie

  6. #6
    se ho ben capito
    Codice PHP:
    <?php

    /*
    array(245=>97, 454 => 46, [249]=> string(2) "37" [253]=> string(2) "10" [451]=> string(1) "6" [45]=> string(1) "3" [234]=> string(1) "2" [16]=> string(1) "2" [316]=> string(1) "1" [320]=> string(1) "1" [328]=> string(1) "1" [110]=> string(1) "1" [357]=> string(1) "1" [310]=> string(1) "1" [221]=> string(1) "1" [370]=> string(1) "1" [238]=> string(1) "1" }


    array(4) { [0]=> array(2) { ["num"]=> string(2) "48" ["category"]=> string(3) "245" } [1]=> array(2) { ["num"]=> string(2) "24" ["category"]=> string(3) "249" } [2]=> array(2) { ["num"]=> string(2) "16" ["category"]=> string(3) "454" } [3]=> array(2) { ["num"]=> string(1) "9" ["category"]=> string(3) "253" } }

    */

    $arrUno = array(245=>97,454=>46,249=>37,253=>10,451=>6,45=>3,234=>2,16=>2,315=>1,320=>1,328=>1,110=>1,357=>1,310=>1,221=>1,370=>1,238=>1);

    $arrDue = array(
    array(
    'num' => '48','category'=>'245'),
    array(
    'num' => '24','category'=>'249'),
    array(
    'num' => '16','category'=>'454'),
    array(
    'num' => '9','category'=>'253')
    );

    //riscrivo arrayDue
    $newArrayDue = array();
    foreach(
    $arrDue as $value)
     
    $newArrayDue[$value['category']]=$value['num']; 

    echo 
    "prima:\n";
    print_r($arrUno);

    echo 
    "\n\n";
    echo 
    "newArrayDue:\n";
    print_r($newArrayDue);

    $cmpFunction = function($keyA,$keyB) use(&$newArrayDue,&$arrUno){

        if(
    array_key_exists($keyA,$newArrayDue) && !array_key_exists($keyB,$newArrayDue))
            return -
    1;
        
        if(!
    array_key_exists($keyA,$newArrayDue) && array_key_exists($keyB,$newArrayDue))
            return 
    1;

        if(
    array_key_exists($keyA,$newArrayDue) && array_key_exists($keyB,$newArrayDue))
            return 
    $newArrayDue[$keyA] == $newArrayDue[$keyB] ? 
                (
    $newArrayDue[$keyA] > $newArrayDue[$keyB] ? -1);
        
        return 
    $arrUno[$keyA] == $arrUno[$keyB] ? : ($arrUno[$keyA] > $arrUno[$keyB] ? -);
    };
        
    uksort($arrUno,$cmpFunction);

    echo 
    "atteso:\n";
    echo 
    "245,249,454,253,gli altri ordinati per valore desc";

    echo 
    "\n\n";
    echo 
    "dopo ordinamento:\n";
    print_r($arrUno);

    praticamente ordinato sul "num" associato all'id della categoria
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    Perfetto, funziona.
    Grazie 1000000000

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.