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

19 réponses


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é

med001
Auteur

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

Hello,
Tu chercher peut-être cette fonction?

Cordialement,
TD

med001
Auteur

@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.

med001
Auteur

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.

med001
Auteur

voilà resultat qui je trouve :

Array
(
[Peter] => 1
[Ben] => 1
[jack] => 1
)

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.

Salut,
l'idéal serait de faire un objet ;)
@pluche
Pierre

@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.

med001
Auteur

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 ?

$myobject->add("peter",35);
$myobject->add("ben",37);
$myobject->add("peter",43);

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.

med001
Auteur

@Lartek oui c'est cà qui je peut faire mon ami mais comment faire cà?

select name, sum(score) as totalscor from player group by name.

@pluche

Pierre

med001
Auteur

@Pierrot01 ,non j'ai pas récupérer le tableau de la base de données

d'ou il vient ton tableau ?