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

    Posizione valore in array e trovare altri valori

    Salve, dovrei realizzare uno script in modo tale che se conosco la posizione di un valore in array, trovo gli altri secondo un "valore massimo" e "valore minimo".

    Mi spiego meglio, ad esempio ho:
    Codice PHP:
    $arr1 = array('c1','c2','c3');
    $arr2 = array('va1','va2','va3','va4','va5'); 
    Io qua conosco la posizione di va4, che quindi sarà 3 (dato che parte da 0 a contare) e so che il massimo è 3 valori (dato che in $arr1 sono 3), quindi devo suddividere $arr2 in gruppi da 3 e vedere in quei gruppi in quale posizione è va4, trovandone gli altri componenti (del gruppo).

    Per capirci in questo caso va4 è nella posizione numero 4 (stavolta senza partire da 0, parliamo in generale), quindi starà nel 2 secondo gruppo in prima posizione (dato che va1, va2, va3 fanno il primo gruppo) e devo trovare va5 (che non so se ci sarà o meno).

    Alla fine dovrebbe venire:

    1° gruppo:

    va1 (sarà sconosciuto a me)
    va2 (sarà sconosciuto a me)
    va3 (sarà sconosciuto a me)

    2° gruppo:

    va4 (conosciuto)
    va5 (sarà sconosciuto a me ma lo dovrò trovare)
    Social Network in costruzione.. Misto tra Twitter e Facebook.. Twitbook o facetter?

  2. #2
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Sinceramente ci ho capito poco... ma da quel poco

    Codice PHP:
    $arr1 = array('c1''c2''c3'); 
    $arr2 = array('va1','va2','va3','va4','va5');

    $pos_conosciuta count($arr1); // la ottieni dal numero di elementi di $arr1, giusto?

    if (isset($arr2[$pos_conosciuta]))
    {
        
    $primo_gruppo   array_slice($arr20$pos_conosciuta);
        
    $secondo_gruppo = (array) $arr2[$pos_conosciuta];
        
    $terzo_gruppo   array_slice($arr2$pos_conosciuta+1);
    }
    else 
    {
        
    // immagino che se la pos conosciuta eccede $arr2 tu voglia formare un solo gruppo valorizzato e gli altri due vuoti... o sbaglio?
        
    $primo_gruppo   $arr1;
        
    $secondo_gruppo = array();
        
    $terzo_gruppo   = array();
    }

    var_dump($primo_gruppo);
    var_dump($secondo_gruppo);
    var_dump($terzo_gruppo); 
    E' questo che ti interessa ottenere?
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  3. #3
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    Rileggendo attentamente quanto hai scritto, mi sà che avevo capito male... avevo frainteso "in gruppi da tre" con "tre gruppi" Prova questo e dimmi se va bene

    Codice PHP:

    // prova le varie combinazioni che ho testato per vedere se il risultato è quello corretto

    $arr1 = array('c1','c2','c3');
    #$arr1 = array('c1','c2','c3', 'c4', 'c5');
    #$arr1 = array('c1','c2','c3', 'c4', 'c5', 'c6'); 
    $arr2 = array('va1','va2','va3','va4','va5');
    #$arr2 = array('va1','va2','va3','va4','va5', 'va6', 'va7');
    #$arr2 = array('va1','va2');

    $nElementiXgruppo count($arr1);
    $nElementi        count($arr2);
    $nGruppi          ceil($nElementi/$nElementiXgruppo);
    $pos              0;
    $result           = array();

    for (
    $i 0$i $nGruppi$i++)
    {
        
    $result[$i] = array_slice($arr2$pos$nElementiXgruppo);
        
    $pos += $nElementiXgruppo;     
    }

    if (
    $nGruppi == 1)
    {    
        if (
    $nElementi $nElementiXgruppo)
        {
            
    $posElemento 'non esiste';
            
    $posGruppo   'non esiste';
        }
        else 
        {
            
    $posElemento $nElementi;
            
    $posGruppo     1;
        }
    }
    else 
    {    
        
    $posElemento 1;
        
    $posGruppo   2;
    }

    var_dump($result);

    echo 
    "Numero di gruppi: $nGruppi
    "
    ;
    echo 
    "Posizione elemento: $posElemento
    "
    ;
    echo 
    "Gruppo di appartenenza: $posGruppo"
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Se data una posizione nota in arr2, vuoi sapere gruppo e partecipanti al gruppo cui appartiene l'elemento noto se arr2 è diviso in tronchi di n elementi con n numero di elementi di un certo arr1, puoi fare:

    Codice PHP:
    <?php
    $arr1 
    = array('c1','c2','c3');
    $arr2 = array('va1','va2','va3','va4','va5');
    $n=count($arr1);
    $m=count($arr2);
    $pos_nota=3// posizione nota nell'array compreas fra 0 e m-1

    // gruppi e posizioni sono indici che partono da 0
    $p=$pos_nota%$n;
    $g=floor($pos_nota/$n);
    echo 
    "l'elemento in posizione nota si trova nel gruppo $g in posizione $p 
    "
    ;

    // calcolo dell'intervallo cui appartiene il gruppo 
    // contenente l'elemeto di posizoine nota in arr2
    // $is è indice di inizio gruppo in arr2
    // $fs è l'indice di fine gruppo in arr2
    $is=$g*$n;
    $fs=$is+$n-1;
    if(
    $fs>$m-1//controllo overflow
        
    $fs=$m-1;
    echo 
    "il gruppo cui appartiene l'elemento di posione nota è costituito dagli elementi:
    "
    ;
    for(
    $i=$is$i<=$fs$i++)
        echo 
    $arr2[$i]."
    "
    ;// quando $i==$pos_nota stiamo visitando l'elemento noto

    ?>
    non dovrebbero esserci errori.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Secta non capisco una cosa.. Dove vengono printati gli altri membri del gruppo?

    Comunque grino grazie, funziona perfettamente
    Social Network in costruzione.. Misto tra Twitter e Facebook.. Twitbook o facetter?

  6. #6
    Utente di HTML.it L'avatar di Secta
    Registrato dal
    May 2002
    Messaggi
    365
    In realtà avevo sbagliato ancora... credevo che il count di $arr1 desse sia il numero max di elementi che la posizione da recuperare... prova questo sperando di averci preso stavolta

    Codice PHP:
    function elabora($arr1$arr2$pos)
    {
        
    $nElementiTotali count($arr2); // numero di elementi totali
        
        
    if ($pos $nElementiTotali || $pos == 0)
        {
            exit(
    'qui da errore poichè cerchi di recuperare una posizione eccedente il numero di elementi o perchè la pos è 0 (inesistente)');
        }
        
        
    $nElementiGruppo count($arr1); // numero di elementi per ogni gruppo
        
    $nGruppi         ceil($nElementiTotali/$nElementiGruppo); // il numero di gruppi da creare
        
    $result          = array(); // questa array sarà valorizzata con tutti i valori da restituire
        
        
    $z 0;
        
        for (
    $i 0$i $nElementiTotali$i++)
        {
            
    $z $i $nElementiGruppo == ? ++$z $z;
            
            
    $result['gruppi'][$z][$i+1] = $arr2[$i];
            
            if (
    $i == $pos)
            {
                
    $result['n_gruppo'] = $z;
                
    $result['v_elem'] = $arr2[$i];
                
    $result['p_elem'] = count($result['gruppi'][$z]);
            }
        }
        
        return 
    $result;
    }
        
        
    $arr1    = array('c1''c2''c3');
        
    $arr2    = array('va1''va2''va3''va4''va5');
        
    $pos     $_GET['pos']; // in modo che quando la testi non devi stare li a modificare il valore ma lo passi dal browser
        
    $elabora elabora($arr1$arr2$pos);

        echo 
    "Numero del gruppo => ${elabora['n_gruppo']}
    "
    ;
        echo 
    "Posizione elemento nel gruppo => ${elabora['p_elem']}
    "
    ;
        echo 
    "Valore dell'elemento => ${elabora['v_elem']}
    "
    ;
        echo 
    'Altri elementi del gruppo => ' implode(' '$elabora['gruppi'][$elabora['n_gruppo']]) . '

    '
    ;
        echo 
    "Tutti i gruppi creati";
        
    var_dump($elabora['gruppi']); 

    Come noterai ho cambiato gli indici dei gruppi e degli elementi, che partono da 1 e non da 0... credo sia più comodo cosi, in caso contrario si modifica facilmente. Come scritto nel commento al codice quando lo testi richiama la pagina con pagina.php?pos=POSIZIONE.
    "Dai diamanti non nasce niente, dal letame nascon fiori."
    Fabrizio De Andrè

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.