Salut , je vais faire un test pour ajouter contenu du tableau qui repetée plusieurs fois dans une autre tableau mais mon code n'est pas fonctionne
voilà mon code:
<?php
$array = array(4,3,1,2,4,5,3,5);
$new= array();
for( $s=0; $s<sizeOf($array); $s++)
{
for( $i=0; $i<sizeOf($new); $i++)
{
if($new[$i]==$array[$s] && $i!=$s)
{
array_push($new, $array[$s]);
}
}
}
echo '<pre>';
print_r($new);
echo '</pre>';
l'affichage du tableau $new est vide
aide moi s'il vous plait et merci d'avance
Bonjour,
Alors avant tout, je vais essayer de comprendre ta question. Tu souhaiterais pouvoir récupérer dans un tableau existant toutes les valeurs non unique :
$input = array(4,3,1,2,4,5,3,5);
$output = array(4,3,5);
Si c´est cela, tu peux utiliser les fonctions array de php ce qui reviendrait a faire la chose suivante :
function returnMultipleArrayValue ($array) {
return array_unique(array_diff_assoc($array, array_unique($array)));
}
Après cette fonction marche uniquement a 100% si ton tableau à 1 seule dimension et 1 seul type. Attention aussi si tu utilises des chaînes de caractères vu que la casse n´est pas prise en compte.
Après si je peux me permettre, tu dois venir d´un autre language parce que j´aurais utilisé la syntaxe foreach plutôt que for pour ta première instruction et il est conseillé d'utiliser la fonction count() plutôt que sizeOf() qui n'est qu'un alias.
J'espère t'avoir aidé
merci pour votre réponse mon ami Guillaume Astier , mais mon objectif est de faire nombre de duplication de valeurs en tableau ,par exemple 4 est existe 2 fois ,5 est existe 3 fois , comment je fais retoure des la somme de retour de nombre de valeurs en tableau ?? merci
@TransientDev merci beaucoup
maintenant supponsons que j'ai cette tableau $age = array("Peter"=>35, "Ben"=>37, "Peter"=>43); , je fais faire la somme des valeurs qui sont duplicate c'est à dire les valeurs qui existe plusieurs fois , comment faire cà et merci d'avance
Salut,
je fais faire la somme des valeurs qui sont duplicate c'est à dire les valeurs qui existe plusieurs fois
pour faire ça,
il faut utiliser array_count_values
, comme la indiqué @TransientDev
$age = array("Peter"=>35, "Ben"=>"37", "Peter"=>43);
D'après ton exemple, toi ce que tu veux, ce n'est pas compter les "valeurs" dupliquées,
mais compter les "index" dupliqués.
Je ne trouve pas de fonction PHP qui fasse ça, j'espère que je ne suis pas passé à coté.
Si elle n'existe vraiment pas, on va devoir la coder nous-même :
Une façon de faire,
pourrait être de créer un tableau associatif qui aura en "clé" toutes les "clés" dont tu veux compter les occurences.
(appelons le "count_occurrences")
Tu initalise count_occurrences en mettant comme valeur "0", à toutes les clés.
Ensuite dans un foreach de la sorte : foreach $age as $key => value
, tu incrémente de 1, la valeur count_occurrences[$key]
J'ai cru comprendre que toutes les clés existent de façon certaine,
si ce n'est pas le cas, tu peux vérifier qu'elle existe avec in_array()
, avant d'incrémenter.
avec ce code je trouve pas la résultat attendue :(
<?php
$age = array("Peter"=>35, "Ben"=>37, "Peter"=>43,"jack"=>4, "jack"=>7);
$i=array();
foreach ($age as $key => $value)
{
if (in_array($value,$age))
array_push($i,$value);
echo $value.'<br>';
}
print_r($i);
tu peux vérifier qu'elle existe avec in_array()
Je me suis trompé,
in_array()
c'est pour les valeurs,
pour les clés on peut utiliser isset()
.
Je pensais faire un truc comme ça :
$age = array("Peter" => 35,
"Ben" => 37,
"Peter" => 43,
"jack" => 4,
"jack" => 7);
$i = array();
foreach ($age as $key => $value)
{
if (!isset($i[$key]))
{
$i[$key] = 0;
}
$i[$key]++;
}
Le problème c'est qu'au début quand on écrit ça :
$age = array("Peter" => 35,
"Ben" => 37,
"Peter" => 43,
"jack" => 4,
"jack" => 7);
un print_r($age);
donne :
Array ( [Peter] => 43 [Ben] => 37 [jack] => 7 )
On ne peut pas dupliquer les index (en même temps ça parait logique).
Le tableau que tu donnes en entrée ne peut pas exister.
tu essaies de travailler sur quelque chose qui n'existe pas.
oui,
c'est parce que le tableau de départ est :
Array ( [Peter] => 43 [Ben] => 37 [jack] => 7 )
Le code :
$age = array("Peter" => 35,
"Ben" => 37,
"Peter" => 43,
"jack" => 4,
"jack" => 7);
donne :
Array ( [Peter] => 43 [Ben] => 37 [jack] => 7 )
On ne peut pas dupliquer les clés.
Ce code là :
$age = array("Peter" => 35,
"Ben" => 37,
"Peter" => 43,
"jack" => 4,
"jack" => 7);
n'a pas de sens,
il est donc "transformé" par PHP en :
$age = array("Ben" => 37,
"Peter" => 43,
"jack" => 7);
On ne peut pas dupliquer les clés.
@Pierrot01
Vas y développe un peu l'idée pour voir.
"Faire un objet" avec :
array("Peter"=>35, "Ben"=>37, "Peter"=>43);
qui fait ce que @med001 voudrait faire.
comment faire en objet ??
supposons que j'ai cette tableau
$m = array(41,1,5,41,7,1,5,3,7);
il n'ya pas des $keys
@med001,
si tu as un tableau comme ça : array(41, 1, 5, 41, 7, 1, 5, 3, 7)
la solution de @TransientDev ne convient pas ?
Bonjour.
Pour ma part, d'après ce que je comprends, tu voudrais faire un système de somme de valeurs concernant une personne et non avoir le nombre de valeurs qui correspondent à une personne.
Donc avoir un retour du type :
array(
'Peter' => 78, // soit : 35 + 43
'Ben' => 37,
'jack' => 11 // soit : 4 + 7
)
Est-ce que c'est ça que tu veux au final ?
Ce serait bien que tu nous dise aussi dans quel contexte tu récupères les données, car si par exemple tu les récupères via une base de données, tu n'as pas besoin de PHP pour avoir ce type de retour, tu peux très bien le faire via SQL.