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

    Array: Controllare se ci sono valori uguali

    Ho un array a più dimensioni formato in questo modo

    $ARRAY[$var1][$var2];

    Array(
    Array(3, 300€, 1, 1, 842)
    Array(3, 300€, 1, 2, 842)
    Array(3, 300€, 1, 3, 842)
    Array(3, 300€, 1, 2, 843)
    Array(3, 300€, 1, 1, 843)
    Array(3, 300€, 1, 3, 843)
    )

    Siccome i valori che mi interessano sono i primi tre valori, ovvero (3, 300€, 1) gli altri valori non mi interessano.
    Se questo array, ha tutti gli array con i primi tre valori (3, 300€, 1) uguali, devo considerare questo array come un unico array formato solo (3, 300€, 1).
    Sarebbe una sorta di array_unique. Ma più complesso.

    Come fare?

    E se invece ho alcuni array diversi e gli altri tutti uguali? Come riesco a compattarli sapendo quali array ho compattato in uno solo?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    sicuramente ci saranno vari modi... comunque:

    Codice PHP:
    foreach ($ARRAY as $k1=>&$v1) {    // scansione primo indice
      
    $equal true$t1 false;              
      foreach (
    $v1 as $k2=>&$v2) {       // scansione interna
        
    $t2 array_slice($v203);
        if (
    $t1===false) {                      // se sono al primo elemento...
          
    $t1=$t2;                                // ...lo memorizzo in $t1
        
    } else {
          if (
    $t2!=$t1) {                        // altrimenti lo confronto con quello memorizzato
             
    $equal false;                    // anche una sola differenza rende false la var. $equal
          
    };
        };
      };
      if (
    $equal) {                               // se non ho trovato differenze...
        
    $t1 = array($t1[0], $t1[1], 1);
        
    $v2 = array($t1);                      // ...modifico l'elemento esterno con un unico contenuto
      
    };
    }; 
    NOTA: ho scritto il codice "al volo"... è da controllare

  3. #3
    Non capisco, qual'è l'Array finale? E quale l'array che mi dice quali array sono stati compressi?
    Ovvero per array compressi intendo quelli che hanno i primi 3 valori uguali. Di questi array compressi, per ciascuno devo ricavare gli altri valori che sono stati ignorati

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmh... in effetti non ti ho spiegato... cmq testa il codice... è scritto per modificare il vettore originale, quindi ti troveresti il risultato in $ARRAY stesso

  5. #5
    NO, mi ha stampato (con il var_dump) una marea di robba senza eliminare i doppioni

    DOvrei avere 2 array alla fine
    Uno che elimina tutti i doppioni e ed un'altro che mi dice quali ha eliminato

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    penso di aver male interpretato com'è fatto il tuo array... puoi usare

    Codice PHP:
    $RES = array();

    $equal true$t1 false;
    foreach (
    $ARRAY as $k1=>$v1) { 
      
    $v1 array_slice($v103);
      if (
    $t1 === false) {
        
    $t1 $v1;
      };
      if ((
    $v1!=$t1) && ($t1!==false)) {         
        
    $RES[] = array($t1[0], $t1[1], 1);
        
    $t1 false;
      };
    }; 
    questo l'ho testato con i dati del tuo post originale e funziona... l'unica cosa è che se l'ultimo elemento è "singolo" non lo conta... dovresti gestirlo a parte

  7. #7
    codice:
    <?php
    $arr = array(
    array(3, '300€', 1, 1, 842),
    array(3, '300€', 1, 2, 842),
    array(3, '300€', 1, 3, 842),
    array(3, '300€', 1, 2, 843),
    array(3, '300€', 1, 1, 843),
    array(4, '300€', 1, 1, 843),
    array(3, '300€', 1, 3, 843)
    );
    
    $unique     = array();
    $duplicates = array();
    
    foreach ($arr as $item) {
    	$item_slice = array_slice($item, 0, 3);
    	if (!in_array($item_slice, $unique)) {
    		$unique[] = $item_slice;
    	} else {
    		$duplicates[] = $item;
    	}
    }
    
    print_r($unique);     // array con valori unici
    print_r($duplicates); // array con i duplicati rimossi

  8. #8
    k.b è proprio quello che serve a me, esatto!
    L'unico problema l'array con i valori unici (senza duplicati fin dalla partenza) non contengono gli altri campi (1, 1, 842).

  9. #9
    Eh no che non li contiene, un po' perche' e' quello che chiedevi tu, un po' perche' in caso di primi 3 valori uguali (ma gli altri diversi), quale ci metti?

  10. #10
    No, parlo di quelli che sono già di per sè unici. Esempio:

    3,300,4,100,300
    2,222,2,100,320
    3,300,4,110,321

    Come vedi il secondo array è unico, mentre gli altri 2 sono duplicati. QUello che devo fare è ottenere quel 100 e 320 del secondo array unico.
    Per quelli duplicati cercherò di inventarmi qualcosa.

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.