Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    855

    array troppo difficile...

    Ciao, devo confrontare ogni elemento di un array con ogni elemento di altri array simili...
    Per esempio, supponiamo che devo trovare dei paramentri per coppie di persone e ho le persone con gli anni:

    - Maschi: Piero (18), Michele (23), Roberto (16), ecc.
    - Femmine: Michela (23), Roberta (48), Elisabetta (72), ecc.
    - sposati: Mirco (32), Mara (23), Monica (72), ecc.
    - ...
    - ...
    - ...
    - ...
    - ...
    - ...

    Come fare, per esempio, per confrontare tutte le coppie possibili di persone che soddisfano un criterio di somma di anni (non conta in questo caso se capitano due maschi o due femmine, è solo un esempio...)?
    Tipo, per ogni coppia la cui somma degli anni non supera il totale di 70, esegui...

    Inoltre, come splittare la stringa in un array che tenga conto pure degli anni (quindi a due dimensioni)?
    La stringa è del tipo:
    "Piero,18-Michele,23-Roberto,16..."

    Non so se qualcuno lo sa mi fa un favore...

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    function get_age_array($str)
    {
        
    $tmp explode("-"$str);
        foreach (
    $tmp as $duplet)
        {
            list(
    $nome$eta) = explode(","$duplet);
            
    $age_array[$nome] = $eta;
        }
        return 
    $age_array;
    }

    $str "Piero,18-Michele,23-Roberto,16";
    print_r(get_age_array($str)); 
    risultato:

    codice:
    Array 
    ( 
    	[Piero] => 18 
    	[Michele] => 23 
    	[Roberto] => 16 
    )
    Intato con questa funzione estrai i nomi e le eta e le metti in un array. Per i discorso riguardante il constrollo sulle coppie dovresti essere un po più chiaro e magari farmi un piccolo esempio pratico. Vediamo se ti posso aiutare.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    855

    ecco l'esempio...

    Ciao grazie...
    Dunque ho bisogno di confrontare tutte le coppie possibili di due persone tra tre array che soddisfano una somma massima in anni.
    Quindi, per esempio: prendi la prima persona dell'array e la seconda, somma le età e se l'età e minore di 70 allora scrivi: minore;
    prendi la prima persona dell'array e la terza...
    prendi la prima persona dell'array e la prima dell'altro array...
    ecc.
    Cioè confrontare a due a due tutte le coppie di elementi dell'array e dell'array con altri array...

  4. #4
    Utente di HTML.it L'avatar di Il_Drugo
    Registrato dal
    May 2006
    Messaggi
    1,220
    Codice PHP:
    function get_age_array($str)
    {
        
    $tmp explode("-"$str);
        foreach (
    $tmp as $duplet)
        {
            list(
    $nome$eta) = explode(","$duplet);
            
    $age_array[] = array("nome" => $nome"eta" => $eta);
        }
        return 
    $age_array;
    }

    function 
    get_duplets($a)
    {
        
    $max_age 70;
        
    $n count($a);
        for(
    $i=0;$i<$n;$i++)
        {
            
    $eta $a[$i]['eta'];
            
    $nome $a[$i]['nome'];
            for(
    $y=$i;$y<$n;$y++)
            {
                if(
    $y != $i)
                {
                    
    $sum $eta $a[$y]['eta'];
                    if(
    $sum $max_age)
                    {
                        
    $d[] = $nome."(".$eta.") - ".$a[$y]['nome']."(".$a[$y]['eta'].")";
                    }
                }
            }
        }
        return 
    $d;
    }

    $str1 "Piero,18-Michele,23-Roberto,16";
    $str2 "Michela,23-Roberta,48-Elisabetta,72";
    $str3 "Mirco,32-Mara,23-Monica,72";

    $array get_age_array($str1."-".$str2."-".$str3);

    $a get_duplets($array);

    foreach (
    $a as $duplet)
    {
        print(
    $duplet."
    "
    );

    la funzione get_age_array() genera l'array bidimensionale (nome, eta) di tutti i nomi presenti nella stringa di input.

    la funzione get_duplets() controlla i valori delle eta delle persone presenti nell'array e restituisce un array con le coppie di persone la cui età è minore di $max_age (cambia quel parametro se ne avessi bisogno).

    $str1, $str2, $str3 sono le 3 stringhe che arrivano in input alle funzioni. Le ho fuse per fare un'unica stringa e ne ho ricavato il corrispettivo array con get_age_array. Dopo di che ne ho ricavato le coppie "compatibili" e l'ultimo foreach è li solo per una questione di printing più ordinato del risultato.

    Spero che fosse quello che ti serviva e soprattutto che non ci siano errori madornali, ma non mi pare.


  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    855

    ecco...

    Ciao, grazie eh e scusa l'imprecisione ma non so nemmeno spegarlo...
    Comunque sì...
    Dunque, considera che devo listare tutte le possibili combinazioni di persone la cui somma mi dia un numero predefinito, nel nostro caso mettiamo 80 come somma di anni totale.
    Quindi se ho un array unico di persone, devo considerare tutte le possibili combinazioni di somme e verificare la condizione=80 di volta in volta.
    Per ottenerle tutte, mi pare che devo sommare il primo con il secondo, poi il primo con il secondo e il terzo, ecc.
    e procedere così con il secondo verso tutti, il terzo verso tutti, ecc.

    Sta menata mi serve per un compito da presentare ma sto impazzendo...

    Mi viene chiesto in sostanza di listare (con nome e anno...) tutti i possibili gruppi di persone dato un insieme finito (supponi 30 persone ma deve essere una routine valida anche per n=100 per esempio...) la cui somma degli anni deve essere pari a un numero dato per esempio 80 (che poi passo io da form).
    Quindi la somma di 80 può essere data da due persone di 40 anni (2 elementi) oppure da due di 20 anni e una di quaranta (3 elementi).
    Il campo è ristretto al solo insieme dato, solo che devo considerare nel listing pure gli omonimi in termini di nome e anno in quanto nel gruppo ci sono per esempio due Michele di 23 anni... come se non bastasse...

    Il risultato deve essere una cosa del tipo:

    Michele,20+Francesca,20+Franco,40
    Francesco,40+Luca,40
    ...

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.