• Home
  • Forum
  • Fare Web
  • PHP

[Php] Elementi comuni di due array

  • Creatore Discussione Creatore Discussione JeanWolf
  • Data di inizio Data di inizio 3 Gen 2017
  • Tag Tag
    array confronto php
Prec.
  • 1
  • 2
Primo Prec. 2 di 2

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 6 Gen 2017
  • #21
PHP:
<?php
/**
 * non deve essere restituita due volte se in uno dei due array è presente una volta
 * ma solo se in entrambi è presente due volte
 * Es. Presi due array (a, b, b, c) e (a, a, b, b,), il risultato voglio che sia (a, b, b)

 * ma forse il problema andrebbe formulato dicendo,

 * un elemento deve essere presente in tutte e due le array,
 * voglio sapere il minimo delle volte che vi compare
 * comunque faccia il confronto
**/

$a2 = array("a", "a", "b", "b");
$a1 = array("a", "b", "b", "c");

$c1 = array_count_values($a1);
$c2 = array_count_values($a2);

var_dump($c1); echo "<br />"; var_dump($c2); echo "<br />";

foreach ($c1 as $key => $val) {
    if (!empty($c2[$key]))
        echo " Key : ".$key." Value : ".min($val, $c2[$key])."<br />";
}

/**
 * RISULTATO 1

array(2) { ["a"]=> int(2) ["b"]=> int(2) }
array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(1) }
 Key : a Value : 1
 Key : b Value : 2

 * RISULTATO 2 (scambiando le array di partenza)

array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(1) }
array(2) { ["a"]=> int(2) ["b"]=> int(2) }
 Key : a Value : 1
 Key : b Value : 2

**/
?>

altrimenti qual è la regola da applicare ?
 

JeanWolf

Nuovo Utente
31 Dic 2016
20
0
1
28
  • 6 Gen 2017
  • #22
Codice:
<?php
/**
* non deve essere restituita due volte se in uno dei due array è presente una volta
* ma solo se in entrambi è presente due volte
* Es. Presi due array (a, b, b, c) e (a, a, b, b,), il risultato voglio che sia (a, b, b)
**/
$a1 = array("a", "a", "b", "b");
$a2 = array("a", "b", "b", "c");

$u1 = array_unique($a1);

$risultato = array_intersect($a2, $u1);

var_dump($risultato);

/**
* RISULTATO
* array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "b" }
**/
?>
Clicca per allargare...

Grazie del codice Marino51 ma il mio codice dovrà accettare due array qualunque e processarli nella stessa maniera. Quello che hai fornito tu vale solo per quel caso particolare.

Con mio grande piacere credo di aver quasi trovato la soluzione

Codice:
<?php
$a = array("a", "a", "b", "g", "r", "b");
$b = array("b", "b", "r", "g", "g", "a");

function verifica($array) {
  if (count(array_unique($array)) < count($array)) {
    $array_double = array_diff_assoc($array, array_unique($array)); //seleziono il valore doppio dell'array
  } else {
    break;
  }

  return $array_double;
}


$a_doubles = verifica($a);  //questo array contiene un solo elemento di ciascuna delle coppie di lettere uguali presenti nel primo array
$b_doubles = verifica($b);// idem per il secondo array

/*
print_r($a_doubles);
echo "<br>";
print_r($b_doubles);
echo "<br><br>";
*/

function trova_doppi($new, $new_2) {
  $d = array(); //array che conterrà le eventuali lettere che sono doppie in entrambi gli array

  foreach ($new as $val) {
    if (in_array($val, $new_2)) {
      $d[] = $val;
    }
  }

  return $d;
}

$d = trova_doppi($a_doubles, $b_doubles);

/*
print_r($d);
echo "<br><br>";
*/
  $c = array_unique(array_diff($a, array_diff($a, $b))); //processo i due array senza contare eventuali valori doppi in comune

if (!empty($d)) {
  $c = array_merge($c, $d);  //aggiungo eventuali valori doppi
}

print_r($c);
?>

Ho fatto varie prove con valori doppi e funziona a meraviglia. Peccato solo che in casi in cui ho due array simili: (a,a,a,b) e (a,a,b,b) mi dà (a,a,a)
 
Ultima modifica: 6 Gen 2017

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 6 Gen 2017
  • #23
JeanWolf ha scritto:
Con array_unique vengono eliminati automaticamente i valori uguali negli array, ma io voglio che essi siano stampati se presenti anche nell'array di confronto
es. Array1 = (a,b,b,c)
Array2 = (b,b,c,d)
Output che vorrei (b,b)
Clicca per allargare...

scusa,
Output che vorrei (b,b,c)
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 6 Gen 2017
  • #24
Grazie del codice Marino51 ma il mio codice dovrà accettare due array qualunque e processarli nella stessa maniera. Quello che hai fornito tu vale solo per quel caso particolare.
Clicca per allargare...
l'ultimo esempio è valido comunque

però sono molto meglio quei codici lunghi lunghi, meno soggetti ad errori ....
 

JeanWolf

Nuovo Utente
31 Dic 2016
20
0
1
28
  • 6 Gen 2017
  • #25
Ti chiedo scusa, errore mio, mi sono dimenticato di scrivere la "c"
 

JeanWolf

Nuovo Utente
31 Dic 2016
20
0
1
28
  • 6 Gen 2017
  • #26
Intendi l'ultimo codice che mi hai inviato?
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 6 Gen 2017
  • #27
JeanWolf ha scritto:
Intendi l'ultimo codice che mi hai inviato?
Clicca per allargare...
si
 

JeanWolf

Nuovo Utente
31 Dic 2016
20
0
1
28
  • 7 Gen 2017
  • #28
Grazie marino51, finalmente ho finito e testato il mio codice. Ora funziona alla perfezione in ogni situazione! Ringrazio anche borgo italia per l'aiuto datomi.

Codice:
<?php
$a = array("b", "h", "r", "r", "h", "g");
$b = array("b", "g", "r", "h", "c", "a");


//controllo se i due array contengono valori ripetuti
if (count(array_unique($a)) < count($a) && count(array_unique($b)) < count($b)) {
    $a_new = array_count_values($a);
    $b_new = array_count_values($b);
  } else {
    $c = array_intersect(array_unique($a), array_unique($b));
    print_r($c);
  }


/*
print_r($a_new);
echo "<br>";
print_r($b_new);
echo "<br><br>";
*/
if (!empty($a_new) && !empty($b_new)) {
  $d = array();

  foreach ($a_new as $key_a => $value_a) {
    foreach ($b_new as $key_b => $value_b) {
      if ($key_a == $key_b && $value_a < $value_b) {
        $array = array_fill(1, $value_a, $key_a);
        $array = array_flip($array);
        $d = array_merge($d, $array);
      } elseif ($key_a == $key_b && $value_a > $value_b) {
        $array = array_fill(1, $value_b, $key_b);
        $array = array_flip($array);
        $d = array_merge($d, $array);
      } elseif ($key_a == $key_b && $value_a == $value_b) {
        $array = array_fill(1, $value_b, $key_b);
        $array = array_flip($array);
        $d = array_merge($d, $array);
      } else {
        continue;
      }
    }
  }
}

/*
$d sarà un'array che avrà come chiavi i valori in comune fra i due array e
per valori il numero minimo di volte in cui compaiono in uno dei due
*/

/*
print_r($d);
echo "<br>";
$array_final = array();
$x = 1;
*/


if (!empty($d)) {
  foreach ($d as $valore => $numero_volte) {
    $x = 1;
    while ($x <= $numero_volte) {
      $array_final[] = $valore;
      $x++;
    }
  }


  print_r($array_final);
}


?>

Se credete poi che debba essere aggiustato od ottimizzato ditemi pure.
 

marino51

Utente Attivo
28 Feb 2013
3.205
207
63
Lombardia
  • 8 Gen 2017
  • #29
PHP:
$a = array("b", "h", "r", "r", "r", "h", "g");
$b = array("b", "g", "r", "h", "c", "a", "r");

$a_new = array_count_values($a);
$b_new = array_count_values($b);

$c = array_intersect(array_unique($a), array_unique($b));

$f = array();
$e = array();
foreach ($c as $key) {
    $e[$key] = min($a_new[$key], $b_new[$key]);
    for ($i = 0; $i<$e[$key]; $i++) {
        $f[]=$key;
    }
}
prova così,
array "f" contiene il risultato finale
array "e" le occorrenze "minime", che se non necessarie, anziché l'array si può usare una variabile semplice
risultato

Codice:
array a : Array ( [0] => b [1] => h [2] => r [3] => r [4] => r [5] => h [6] => g )
array b : Array ( [0] => b [1] => g [2] => r [3] => h [4] => c [5] => a [6] => r )

ottimizzato
array finale : Array ( [0] => b [1] => h [2] => r [3] => r [4] => g )

non ottimizzato
array finale : Array ( [0] => b [1] => h [2] => r [3] => r [4] => g )
 
Ultima modifica: 8 Gen 2017

JeanWolf

Nuovo Utente
31 Dic 2016
20
0
1
28
  • 8 Gen 2017
  • #30
Ti ringrazio del codice di gran lunga più ottimizzato e snello del mio!
 
Prec.
  • 1
  • 2
Primo Prec. 2 di 2
Devi accedere o registrarti per poter rispondere.

Discussioni simili

S
[PHP] Estrarre elementi array su più variabili
  • samurai.sette
  • 14 Mag 2019
  • PHP
Risposte
5
Visite
5K
PHP 16 Mag 2019
Max 1
S
elementi statistici - Matrice e Gestione Array PHP o Javascript
  • sylvia64
  • 24 Ago 2018
  • Javascript
Risposte
0
Visite
1K
Javascript 24 Ago 2018
sylvia64
S
[PHP] Elementi di un array non visualizzabili
  • alessandra86
  • 10 Mag 2018
  • PHP
Risposte
7
Visite
2K
PHP 11 Mag 2018
alessandra86
D
[PHP] Elementi tabella in orizzontale e NON Verticale
  • Domenico2013
  • 7 Dic 2017
  • PHP
Risposte
12
Visite
3K
PHP 10 Dic 2017
Domenico2013
D
C
[PHP] RISOLTO - Eliminare elementi duplicati da array multidimensionale
  • ciccioroky
  • 17 Mar 2017
  • PHP
Risposte
1
Visite
3K
PHP 17 Mar 2017
ciccioroky
C
Accesso agli elementi <![CDATA[ ... ]]> di un file XML con SimpleXML e PHP
  • otto9due
  • 25 Apr 2015
  • PHP
Risposte
2
Visite
2K
PHP 29 Apr 2015
otto9due
N
PHP Ricerca utente, Tabella con più elementi
  • Nickname
  • 27 Giu 2014
  • PHP
Risposte
8
Visite
2K
PHP 2 Lug 2014
Nickname
N
A
Nascondere gli elementi di un form con php
  • alanolontano
  • 2 Gen 2010
  • PHP
Risposte
5
Visite
9K
PHP 3 Gen 2010
Eliox
H
Need Help with PHP Database Connection Issues
  • hellmmithha
  • 19 Dic 2024
  • PHP
Risposte
1
Visite
605
PHP 21 Mar 2025
therope
T
F
Cerco Hosting con VECCHIE versioni di php
  • frk
  • 4 Mar 2024
  • Hosting
Risposte
0
Visite
2K
Hosting 4 Mar 2024
frk
F
Captcha php
  • Cosina
  • 21 Gen 2024
  • PHP
Risposte
1
Visite
2K
PHP 22 Gen 2024
WmbertSea
S
passare un valore da un form a un file .php con metodo post
  • smack2005
  • 15 Nov 2023
  • PHP
Risposte
4
Visite
1K
PHP 23 Nov 2023
zorro
N
php msyql
  • nik13
  • 10 Ott 2023
  • PHP
Risposte
6
Visite
2K
PHP 23 Ott 2023
zorro
N
php problemi a visualizzare video
  • nik13
  • 8 Ott 2023
  • PHP
Risposte
3
Visite
2K
PHP 11 Ott 2023
WmbertSea
A
menu a tendina php
  • Annama74
  • 30 Apr 2023
  • PHP
Risposte
1
Visite
2K
PHP 1 Mag 2023
marino51
D
  • Bloccata
protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito
  • dastur67
  • 5 Apr 2023
  • Web Server
Risposte
1
Visite
3K
Web Server 5 Apr 2023
dastur67
D
F
Php date_diff
  • Fra_23
  • 30 Mar 2023
  • PHP
Risposte
1
Visite
1K
PHP 31 Mar 2023
marino51
K
[PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa
  • Kiko74b
  • 16 Mar 2023
  • PHP
Risposte
2
Visite
2K
PHP 18 Mar 2023
Kiko74b
K
C
Wp-admin a file php
  • Cpu03
  • 25 Gen 2023
  • WordPress
Risposte
5
Visite
4K
WordPress 6 Mar 2023
Cpu03
C
[Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress
  • Lino80
  • 9 Gen 2023
  • Offerte e Richieste di Lavoro e/o Collaborazione
Risposte
0
Visite
3K
Offerte e Richieste di Lavoro e/o Collaborazione 9 Gen 2023
Lino80
Condividi:
Facebook X (Twitter) LinkedIn WhatsApp e-mail Condividi Link
  • Home
  • Forum
  • Fare Web
  • PHP
  • Italiano
  • Termini e condizioni d'uso del sito
  • Policy Privacy
  • Aiuto
  • Home
Community platform by XenForo® © 2010-2024 XenForo Ltd. | Traduzione a cura di XenForo Italia
Menu
Accedi

Registrati

  • Home
  • Forum
    • Nuovi Messaggi
    • Cerca...
  • Novità
    • Featured content
    • Nuovi Messaggi
    • Ultime Attività
X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?

X

Privacy & Transparency

We use cookies and similar technologies for the following purposes:

  • Personalized ads and content
  • Content measurement and audience insights

Do you accept cookies and these technologies?