2015-05-15 10 views
6

Pubblicazione prima volta su StackOverflow.Conteggio, evidenziazione e stampa dei duplicati tra due array

Dopo aver stampato l'array principale, sono riuscito a evidenziare i valori che si trovano nel secondo, ma voglio anche stampare il numero di volte in cui il duplicato si verifica tra parentesi allo stesso tempo. Ho esaurito le idee su come fare quell'ultima parte, rimango bloccato in più loop e altri problemi. Incollo qui ciò che funziona per ora.

Il codice: RESULT

$main = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
       12, 13, 14, 15, 16, 17, 18, 19, 20); 

$secondary = array(1, 6, 10, 6, 17, 6, 17, 20); 

foreach ($main as $number) 

{ 

if (in_array($number, $secondary)) 

{ 

echo $item; 

// this one is supposed to be highlighted, but the html code disappears on stackoverflow 

/* this is where the number of duplicates should appear in bracket, example: 

highlighted number(number of duplicates) */ 

} 

else 

{ 

echo $item; 

// this one is simple 

} 
} 

PREVISTO:

1 (1), 2, 3, 4, 5, 6, (3), 7, 8, 9, 10 (1), 11, 12, 13, 14, 15, 16, 17 (2), 18, 19, 20 (1)

In pratica le parentesi contengono il numero di volte in cui il valore si trova nel secondo array, oltre ad essere colorato, ma non posso incollare il codice html per qualche motivo. Scusa per non aver reso il risultato atteso più chiaro!

PROBLEMA RISOLTO: Grazie a tutti per il vostro aiuto, la prima volta che utilizzate questo sito Web, non vi aspettavate una risposta così rapida da parte vostra. Grazie mille !

+1

Potete per favore pubblicare il tuo risultato atteso .. –

risposta

2

È necessario per ottenere i valori di conteggio del vostro secondary gamma primo utilizzo array_count_values. Questo è ciò che è possibile acquisire come

$main = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20); 

$secondary = array(1, 6, 10, 6, 17, 6, 17, 20); 
$count_values = array_count_values($secondary); 

foreach ($main as $key => $value) { 
    if (in_array($value, $secondary)) { 
     echo $value . "<strong>(" . $count_values[$value] . ")</strong>"; 
     echo (++$key == count($main)) ? '' : ','; 
    } else { 
     echo $value; 
     echo (++$key == count($main)) ? '' : ','; 
    } 
} 

uscita:

1 (1), 2,3,4,5,6 (3), 7,8,9,10 (1), 11 , 12,13,14,15,16,17 (2), 18,19,20 (1)

+0

Grazie per la risposta. Ha risolto il mio problema. –

+0

@LostinCode Felice di aiutare ... –

0

Supponendo $ secondario è quello con i gonzi, si dovrebbe andare a questo proposito il contrario:

$dupes = array(); 
foreach($secondary as $number) { 
    if (in_array($number, $main)) { 
     $dupes[$number]++; 
    } 
} 
var_dump($dupes); 
+0

Questo non è quello che sto cercando, ma grazie per il tuo aiuto. Modificherò il mio post originale con un risultato previsto. –

0
<?php 
    $main = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12, 13, 14, 15, 16, 17,18,19,20); 
    $secondary = array(1, 6, 10, 6, 17, 6, 17, 20); 
    $result =array(); 
    foreach($main as $key => $value){ 
     $i=0; 
     foreach($secondary as $key1 => $value1){ 
      if($value == $value1){ 
       $i++; 
      } 
      $result[$value] = $i; 
     } 
    } 
    $resultString =''; 
    foreach($result as $key => $value){ 
    $resultString .=$key.'('.$value.'),' ; 
    } 
    echo trim($resultString,','); 
    ?> 

risultato:

1(1),2(0),3(0),4(0),5(0),6(3),7(0),8(0),9(0),10(1),11(0),12(0),13(0),14(0),15(0),16(0),17(2),18(0),19(0),20(1)