Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Ordinamento array bidimensionale

    Ho cercato in giro sia su google che qui ma non ho capito niente...

    Allora,
    ho un array monodimensionale così composto:
    Array ( [0] => 3 [1] => 0 [2] => 5 [3] => 1 [4] => 2 [5] => 4 )

    e un array bisimensionale del tipo
    Array (
    [0] => Array ( [0] => D [1] => D [2] => X [3] => V [4] => V [5] => F )
    [1] => Array ( [0] => D [1] => F [2] => X [3] => F [4] => X [5] => F )
    )

    ora devo ordinare gli array di quelli bidimensionale, in base ai valori di quello monodimensionale
    per farvi capire meglio dovrei ottenere dopo il processo

    Array (
    [0] => Array ( [0] => D [1] => V [2] => V [3] => D [4] => F [5] => X )
    [1] => Array ( [0] => F [1] => F [2] => X [3] => D [4] => F [5] => X )
    )

    l'array monodimensionale è strutturato in questo modo

    array( [posizione_nuova] => posizione_vecchia)

    nell'array bidimensionale, gli elementi nella posizione_vecchia devono spostarsi nella posizione_nuova specificate dall'array monodimensionale.

    Spero di essermi spiegato bene.

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Codice PHP:
    $uni=Array ( [0] => [1] => [2] => [3] => [4] => [5] => ) ;

    $bid=Array ( 
    [
    0] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => 
    [
    1] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => 
    );


    $i=0;
    foreach (
    $bid as $value)
    {
        for(
    $j=0;j<count($uni);$j++)
        {
            
    $app[$uni[$j]]=$value[$j];
        }
        
    $bid[$i]=$app;
        
    $i++;

    provalo, non l'ho testato

  3. #3
    in teoria dovrebbe funzionare, non so perchè non ci abbia pensato prima.
    Però appena provo a farlo partire, si comporta come se entrasse in un loop infinito e dopo aver aggiornato la pagina 3 o 4 volte, impazzisce apache e devo riavviarlo...
    l'ho modificato un pò, eccolo:

    Codice PHP:
    for($i 0$i count($array); $i++) {
                for(
    $j 0$j count($keys); $j++) { 
                    
    $app[$keys[$j]] = $array[$i][$j]; 
                }
                
                
    $array[$i]=$app
            } 
    succede la stessa cosa sia con il tuo originale che con quello che ho modificato io.

  4. #4
    studiati array_multisort()

  5. #5
    Originariamente inviato da oly1982
    studiati array_multisort()
    ci ho provato...
    non riesco a capire come dirgli che deve ordinare l'array in base ad un altro array.

  6. #6
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Codice PHP:
    $uni=Array ( [0] => [1] => [2] => [3] => [4] => [5] => ) ; 

    $bid=Array (  
    [
    0] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => )  
    [
    1] => Array ( [0] => [1] => [2] => [3] => [4] => [5] => )  
    ); 


    foreach (
    $bid as $value

         
    array_multisort($uni$value);
     } 

  7. #7
    gia provato così, ma non ordina niente. Mi restituisce $bid esattamente come prima.

  8. #8

  9. #9
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Prerequisiti:
    Condizione fondamentale, non verificata dalla funzione che propongo, è che i subarray che compongono l'array dati a 2 dimensioni e l'array delle nuove posizioni abbiano tutti medesima cardinalità.
    L'array delle nuove posizione sia organizzato in modo tale che nelle chiavi si abbiano le vecchie posizioni e nei valori le nuove.

    Nota:
    L'inizializzazione dell'array result è necessario affinché PHP non utilizzi l'array come associativo ma come indicizzato con chiave numerica. In realtà gli array PHP sono sempre associativi, quindi facciamo in modo che le chiavi numeriche siano in ordine corretto. Vengono quindi allocate tutte le posizioni necessarie e poi aggiornate con i valori corretti.

    Risultato a video del codice di test:
    codice:
    Array
    (
        [0] => Array
            (
                [0] => D
                [1] => V
                [2] => V
                [3] => D
                [4] => F
                [5] => X
            )
    
        [1] => Array
            (
                [0] => F
                [1] => F
                [2] => X
                [3] => D
                [4] => F
                [5] => X
            )
    
    )
    Codice sorgente:
    Codice PHP:
    <?php
    function SortByArray($dataArray,$posArray){
        
    //Inizializzazione dell'array result
        
    foreach($dataArray as $key=>$array)
            foreach(
    $array as $value)
                
    $result[$key][]="fake value";

        
    //Allocazione dei dati nell'array risultante
        
    foreach($dataArray as $key=>$array)
            foreach(
    $posArray as $old=>$new)
                
    $result[$key][$new]=$array[$old];

        return 
    $result;
    }

    $data=array(
        array(
    'D','D','X','V','V','F'),
        array(
    'D','F','X','F','X','F')
        );
    $pos=array(3,0,5,1,2,4);

    $newArray=SortByArray($data$pos);
    echo 
    '<pre>'.print_r($newArray,true).'</pre>';
    ?>
    Ora che mi sono distratto un po' torno al lavoro... ciao!
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  10. #10
    La fuznione postata da bstefano funziona, è che c'è un errore di sintassi...

    Codice PHP:
    $uni=Array ( 30512) ;

    $bid=Array (
    => Array ( "D""D""X""V""V""F" ),
    => Array ( "D""F""X ""F""X""F" )
    );


    $i=0;
    foreach (
    $bid as $value)
    {
        for(
    $j=0;$j<count($uni);$j++)
        {
            
    $app[$uni[$j]]=$value[$j];
        }
        
    $bid[$i]=$app;
        
    $i++;

    l'errore era in for($j=0;$j<count($uni);$j++), che era scritta senza il $ nella condizione di verifica...

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.