Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: ordinamento array

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    126

    ordinamento array

    Ciao a tutti,
    vorrei capire come fare questo ordinamento... non ci riesco!!

    composizione elemento "prima parte|seconda parte" esempio elem = "13|f";

    mi spiego, all'arrivo di un elemento viene inserito in un array $arr[] = $new_elem;

    e dev'essere inserito dove c'e un elemento con la prima parte uguale

    esempio $arr1 = array('14|a', '13|c', '14|d'); a me interessa che tale array venga ordinato in $ord_arr1 = array('14|a', '14|d', '13|c');

    lo stesso ordinamento deve funzionare se avessi $arr2 = array('12|a','12|c','15|d'); oppure
    $arr3 = array('12|a','12|c','12|d');


    spero di essere stato chiaro
    sto provando:

    <?
    $ord_id = array();


    $arr = array('12|a','13|c','12|d');
    $co_arr = count($arr);


    echo $co_arr.'<br>';


    for($f=0; $f<$co_arr; $f++){


    $ff +=1;
    //$arr_id[] = $arr[$f];




    for($lp=0; $lp<$co_arr-1; $lp++){
    for($lp1=$lp+1; $lp1<$co_arr; $lp1++){

    if((substr($arr[$lp],0,strpos($arr[$lp], '|'))) != (substr($arr[$lp1],0,strpos($arr[$lp1], '|')))){
    $ord_id[] = $arr[$lp1];
    //$ord_id[] = $arr[$lp1];
    }else{
    /* if(($lp == 0) || ($lp1 == 1)){
    $ord_id[] = $arr[$f];
    }
    */ $ord_id[] = $arr[$lp];
    $ord_id[] = $arr[$lp1];
    //echo $arr_id[$lp1].' m ';
    }

    }
    }





    echo $ff.' '.$ord_id[$f].'<br>';
    }

    ?>

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    126
    forse mi sono espresso male...

    a me serve che le posizioni mi rimangono invariate tranne per chi e doppio

    $arr4= array("15|d", "11|s", "10|a", "11|c");

    si trasforma in

    $new_arr4= array("15|d", "11|s", "11|c", "10|a");

    tenedo in considerazione solo la prima parte per l'ordinamento
    composizione elemento "prima parte|seconda parte" esempio elem = "13|f";

    grazie

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ordinare in quel modo lì un array è un bel casino, si fa, ma ci servono un sacco di controlli e cicli annidati, che non sono una bella cosa.
    Ti crea problemi alla logica dell'applicazione ordinarlo con sort()?

  5. #5
    Così:
    Codice PHP:
    <?php
    $arr1
    = array("15|d""11|s""10|a""11|c");
    sort($arr1SORT_NUMERIC);$new array_reverse($arr1);print_r($new);
    Alberto
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Da quello che ho capito non gli serve né in ordine crescente, né decrescente, ma solo che raggruppi le entry con numero uguale.

    del tipo

    $arr4= array("15|d", "10|s", "11|a", "10|c");

    diventa

    $arr4= array("15|d", "10|s", "10|c", "11|a");

  7. #7
    Nel caso più generale ( non quelli esposti finora ) ha più gradi di libertà per raggruppare:

    15|d 10|s 11|a 10|c 5|f 11|d

    Non è stato molto chiaro, allora quale posizione vorrà mantenere in questo caso?
    Sistemi di allarme, telecamere, autoradio, video proiettori e altri prodotti tecnologici: fedom.it

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    126
    cercherò di farmi capire con degli esempi:

    $arr4= array("15|d", "25|s", "10|a", "13|c");

    arrivo di un nuovo elemento da aggiungere al mio array $a = "15|a";

    andrebbe aggiunto in posizione 2 come sotto in quanto la prima parte dell'elemento è uguale a 15 (composizione elemento "prima parte|seconda parte" esempio elem = "13|f")

    $new_arr4= array("15|d", "15|a", "25|s", "10|a", "13|a");


    tralasciando il discorso di prima e seconda parte, in quanto nn interessa al momento io sto lavorando su questa soluzione

    con array_search

    <?


    $$ord_arr = array();


    $b = '10|a';


    $arr = array('10|a','12|a','13|a','13|a','14|a');
    $co_arr = count($arr);


    $k = array_search($b, $arr);


    echo 'pos '.$k.'<br>';


    for($c=0; $c<=$co_arr; $c++){
    $n += 1;
    echo $k.' == '. $c.' ';


    if($k == null){
    $ord_arr[] = $arr[$c];
    if($c == $co_arr){
    $ord_arr[] = $b;
    }
    }else{


    if($k == $c){
    $ord_arr[] = $arr[$c];
    $ord_arr[] = $b;
    }else{
    $ord_arr[] = $arr[$c];
    }

    }
    echo ' n '.$n.' '.$ord_arr[$c].'<br>';
    }

    ?>

    funziona all'arrivo di un elemento che sia di posizione non null o diversa da 0
    qualcuno mi può dare lumi?

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    126
    risolto il problema del null

    così primo if dentro il for:

    if($k == null){
    if($c < $co_arr){
    $ord_arr[] = $arr[$c];
    }else{
    $ord_arr[] = $b;
    }

    ora rimane da sistemare il caso $k = 0

  10. #10
    senti, lascia stare l'algoritmo, dicci la logica di ordinamento, che così come hai esposto non si capisce perchè 15|d stà prima di 10|a ma 25|s stà dopo 15|d... in base a che logica vuoi tale ordinamento?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.