Contare valori uguali di un array e dividerli in una stringa

Monital

Utente Attivo
15 Apr 2009
778
2
18
Buonasera.

Avrei una necessità su un array. conosco i vari comandi con array_values etc però non riesco a interagire il tutto

poniamoa d esempio di avere un array risultante cosi composto

PHP:
$nomi=array("Michele","Michele","Paolo");

io dovrei contare gli elementi uguali nel'array(se ce ne sono) e ragguparli in una stringa per farlo diventare

PHP:
$nuovinomi=Michele(2),Paolo.

al momento con l'implode sono risucito solo a fare

PHP:
$nuovinomi=Michele,Michele,Paolo.

pensavo di fare $contonomi=array_count_values($nomi)però no so come dividerlo epr poi portarlo a stringa

potrei usare array_value o array search, ma sempre non so come portarmelo poi per fare la stringa che cerco

suggerimenti?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ammetto che la mia idea è molto discutibile e artigianale ma vista l'ora non ho saputo dare di più

mi scuso in anticipo anche se funzionale


PHP:
<?php

$nomi = array("Michele", "Michele", "Pietro", "Pietro", "Paolo", "Paolo", "Paolo", "Aldo");

$stringa = array();
foreach ($nomi as $key => $value) {
    if (!in_array($value, $nomi)) {
        $stringa[] = $value;
    } else {
        $c = array_count_values($nomi);
        $n = $c[$value];
        $stringa[array_search($value, $nomi)] = $value . "(" . $n . ")";
    }
}
$stringa = implode(',', $stringa);

echo $stringa;

// output Michele(2),Pietro(2),Paolo(3),Aldo(1)
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Si può anche togliere la if all'interno del ciclo che non serve

cosi è più pulito

PHP:
<?php

$nomi = array("Gianni","Aldo","Michele", "Pietro", "Michele", "Pietro", "Pietro", "Paolo", "Paolo", "Paolo", "Aldo","Gianni");

$stringa = array();
foreach ($nomi as $value) {
        $c = array_count_values($nomi);
        $n = $c[$value];
        $stringa[array_search($value, $nomi)] = $value . "(" . $n . ")";   
}
$stringa = implode(',', $stringa);

echo $stringa;

// output Gianni(2),Aldo(2),Michele(2),Pietro(3),Paolo(3)
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
Si può anche togliere la if all'interno del ciclo che non serve

cosi è più pulito

PHP:
<?php

$nomi = array("Gianni","Aldo","Michele", "Pietro", "Michele", "Pietro", "Pietro", "Paolo", "Paolo", "Paolo", "Aldo","Gianni");

$stringa = array();
foreach ($nomi as $value) {
        $c = array_count_values($nomi);
        $n = $c[$value];
        $stringa[array_search($value, $nomi)] = $value . "(" . $n . ")";   
}
$stringa = implode(',', $stringa);

echo $stringa;

// output Gianni(2),Aldo(2),Michele(2),Pietro(3),Paolo(3)
?>


funziona alla grande. Grazie

una chicca però se volessi escludere l'(1) cioè quando trova un elemento unico non deve mettere l'1

si può?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Una soluzione veloce potrebbere essere questa

PHP:
<?php

$nomi = array("Gianni", "Michele", "Pietro", "Michele", "Pietro", "Pietro", "Paolo", "Paolo", "Paolo", "Aldo", "Gianni");

$stringa = array();
foreach ($nomi as $value) {
    //
    $c = array_count_values($nomi);
    $n = $c[$value];
    if ($n == 1) {
        $stringa[array_search($value, $nomi)] = $value;
    } else {
        $stringa[array_search($value, $nomi)] = $value . "(" . $n . ")";
    }
}

$stringa = implode(',', $stringa);

echo $stringa;

// output Gianni(2),Michele(2),Pietro(3),Paolo(3),Aldo
?>
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
ci avevo pensato però credo che facendo cosi basta che ne trovi uno con valore n=1 per valorizzare la prima ipotesi

nona vevo modo di provare prima ma dopo ti so dire se funge
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
perfetto eprfetto

grazie tante. mi hai eprmesso dir isolvere un bug del mios cript :beer::beer::beer:

p.s

vedoc he sei ferrato in materia di stringhe posso chiedere un altra cosa? non è impostante ma se risucissi a farla non sarebbe male

se l'array risultante dall'esempio su
PHP:
echo $stringa;

// output Gianni(2),Michele(2),Pietro(3),Paolo(3),Aldo

mi trovo
PHP:
echo $stringa;

// output Gianni_Neri(2),Michele_Pasotre(2),Pietro_Virdis(3),Paolo_Melegatti(3),Aldo_Busi
ed oltre a fare quanto sopra volessi eliminare _Neri e _Virdis etc?

al momento dopo il tuo cionsiglio di cui sopra mi limito a un str_replace del _ con uno spazio vuoto, con substr o strpos potreir isolvere ma dovrei fargli capire che deve cancellarmi partendo dal _ fino al valore successivo

rendendomi la stringa pulita

PHP:
echo $stringa;

// output Gianni(2),Michele(2),Pietro(3),Paolo(3),Aldo
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Potrebbe funzionare cosi

PHP:
<?php
$nomi = array("Gianni_uno", "Pietro_due", "Michele_tre", "Pietro_due", "Pietro_due", "Aldo_quattro", "Gianni_uno");

$stringa = array();
foreach ($nomi as $value) {
    
    $exp = explode('_', $value);
    $solo_nome = $exp[0];
    
    $c = array_count_values($nomi);   
    $n = $c[$value];

    if ($n == 1) {
        $stringa[array_search($value, $nomi)] = $solo_nome;
    } else {
        $stringa[array_search($value, $nomi)] = $solo_nome . "(" . $n . ")";
    }
}

$stringa = implode(',', $stringa);

echo $stringa;

// output Gianni(2),Pietro(3),Michele,Aldo
?>

se ho capito bene
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
cririrc grazie del supporto

cmq preso cosi com'è funge ma con l'array che mi arriva questa parte dell'explode non funziona

l'array chemia rriva e composto cosi

PHP:
array([0]=>Michele_Peri [1]=>Giovanni_Mela [2]=>Giovanni_Mela)


etc...

ed ho usatoil codice da te postato così
PHP:
$nomi=$mioarray///derivante da un form

foreach ($nomi as $value) {
   
    $c = array_count_values($nomi);   
    $n = $c[$value];

    if ($n == 1) {
        $stringa[array_search($value, $nomi)] = $value;
    } else {
        $stringa[array_search($value, $nomi)] = $value. "(" . $n . ")";
    }
}

$stringa = implode(',', $stringa);

$stringa=str_replace("_"," ",$stringa);

echo $stringa;

cosi mi elenca Michele Peri(2),Giovanni Mela

susando l'explode come da esempio preceednte(e tolgiendo il str_replace) mi restituisce la stessa cosa
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
avevi notato anche la modifica in queste righe?

PHP:
if ($n == 1) {
        $stringa[array_search($value, $nomi)] = $solo_nome;
    } else {
        $stringa[array_search($value, $nomi)] = $solo_nome . "(" . $n . ")";
    }
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
avevi notato anche la modifica in queste righe?

PHP:
if ($n == 1) {
        $stringa[array_search($value, $nomi)] = $solo_nome;
    } else {
        $stringa[array_search($value, $nomi)] = $solo_nome . "(" . $n . ")";
    }


sisi l'ho messo così come lo hai postato e controllato più volte

magari faccio un altro tentativo forse sbaglioq aulcosa
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Mi sembrava strano perchè l'avevo testato

al massimo posta quello che hai scritto
 

Monital

Utente Attivo
15 Apr 2009
778
2
18
si la'vevo testato anche io come lo avevi ppostato e funzioanva bene però nellos cript pareva non riconoscere _

ec'era un perchè

non mi sono accorto che anche nel file che inviava l'array aveva un str_replace quindi l'array arrivava già pulito

provato ora e funziona tutto da Dio

grazie criric

a buon rendere
 
Discussioni simili
Autore Titolo Forum Risposte Data
S Contare valori uguali in una colonna PHP 2
L Contare determinati valori che si ripetono in una tabella per un detemrinato ID MySQL 2
A Contare gli elementi di un array PHP 13
maxnegri Contare sessioni aperte e creare condizione PHP 1
L contare record uguali in file csv PHP 3
B [MySQL] contare quante un oggetto e' presente MySQL 2
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
P [PHP] Contare quante volte uno stesso id si ripete nella tabella PHP 12
P [PHP] Contare i mesi con timestamp. PHP 8
A Contare n° totale oggetti da mysql PHP 5
C Contare numero record uguali Database 3
asevenx [Javascript] [AngularJS] contare opzioni selezionate di una select in un elenco ng-repeat Javascript 0
G [ACCESS2007]: contare li ultimi record con lo stesso valore in un campo, finchè il valore non cambia MS Access 2
xone [PHP] Contare numero dei giorni tra data_in e data_out PHP 11
zorro [PHP] Contare i record di una tabella PHP 6
F Contare le righe con php ad oggetti MySQL 0
asevenx Contare numero di righe in un form dinamico Javascript 5
F Miglior metodo per contare le righe di una query MySQL 2
N Contare post MySQL 2
L contare nodi figli di un determinato nodo madre XML 0
H Contare file presenti nella pagina PHP 3
S [RISOLTO]php contare numero delle query PHP 1
Monital Contare il numero di righe con php5 PHP 10
M contare record db con valore specifico PHP 1
Shyson Contare i caratteri user e dominio Javascript 57
D Contare numero div con una determinata classe Javascript 2
criric Contare le settimane di un mese Snippet PHP 3
nim contare record uguali in tabella PHP 10
anthares Contare record in tabella secondo certe condizioni PHP 21
nim contare frasi che si ripetono PHP 10
R Contare il numero di click su un link PHP 2
A contare iniziali dei nomi Java 3
G contare e sommare dopo JOIN Database 8
M non contare gli accessi dal tuo pc Supporto Mr.Webmaster 1
S Come contare i Download file .zip su html HTML e CSS 10
M Problemi con la stampa dei valori in php PHP 1
M Passaggio Valori checbox in textarea Javascript 1
D passare valori da database sql a php PHP 1
O Recupero valori da listato Javascript 0
R Raggruppare valori array PHP 5
R Estrarre valori duplicati più volte PHP 0
T recupero valori select multipla da android Javascript 3
L estrarre valori max tra più tabelle MySQL 2
MarcoGrazia Valori di ritorno json via ajax non visti. jQuery 1
N VENDITA CORSO DROPSHIPPING LUCA VALORI Altri Annunci 0
A Ottenimento valori presenze istantanee MySQL 8
S Come filtrare valori di un array PHP 4
L Estrazione valori max su più campi MySQL 4
G Controllare valori in 2 tabelle PHP 5
X [Select] Valori chiave non presenti in un'altra tabella MySQL 2

Discussioni simili