-2
votes

PHP supprimer des duplicats dans un grand tableau

Je retiens les doublons d'un tableau, j'ai utilisé array_unique ($ array) ,

ici un exemple pour la matrice que j'ai testée sur: [7 6 4 3 3 4 9] . xxx

voici ma fonction: xxx

alors j'ai eu 2 erreurs principales:
  • Lorsque je l'ai testé sur un tableau avec 299 éléments, il n'a pas fonctionné.

  • second problème est qu'il n'a pas renvoyé le dernier élément du tableau

    ce que j'ai essayé:

    • J'ai essayé de rechercher sur Google sur qui supprimer des doublons dans de grandes matrices, mais je n'ai pas trouvé le résultat que je recherche
    • Et j'ai essayé la fonction Fonction ($ Array) puis Array_Push fonction pour ajouter le dernier élément à ma fonction, mais cela ne fonctionnait pas aussi, et je suppose que ce n'est pas même la bonne solution. et je n'ai pas reçu d'erreur claire pour partager avec vous.

      Que peut être le problème?

      Merci d'avance.


13 commentaires

php.net/manual/fr/funcunk.array-unique.php < / a>?


Utilisez Array_unique pour supprimer la même valeur.


Je l'ai utilisé (je l'ai mentionné ci-dessus), avec tous les $ Sort_Flags aussi.


Pouvez-vous nous montrer votre code s'il vous plaît?


Partagez également quel est le résultat attendu.


@Romainv `fonction rmrepeat ($ array) {$ array2 = array_unique ($ TRAY); retour $ $ Array2; } // Array d'entrée $ A = Array (1, 2, 5, 2, 9); $ newarray = rmrepeat ($ a); "


Testé pour 450 valeurs, fonctionnant bien: - 3v4l.org/rrn50


Le code que vous avez donné fonctionne simplement bien Demo - Quel résultat attendu recherchez-vous exactement?


@jibsteroos Il veut le deuxième 2 pour rester et supprimer le premier.


@Anantsingh --- Alivetodie qui est bizarre, je faisais un test de codingame, et je l'ai écrit, il m'a dit que je ne retourne pas la dernière valeur et il ne fonctionne pas sur 299 éléments, et je l'ai testé sur mon ordinateur et travaille bien ... alors peut-être que le test est faux, merci.


@Omarelrafhi, il ne gardera pas le dernier article. Si vous entrez [2,2] , c'est le premier qui est gardé et la seconde qui est supprimée lors de l'utilisation Array_unique telle qu'elle est. Mais si vous inverserez avant Array_unique, vous garderez le dernier 2


@Andreas je sais, mais dans le test, ils ont dit: (L'ordre initial des valeurs doit être conservé)


@Omarelrafhi Si vous inversez un tableau, puis inversez à nouveau, la commande sera conservée.


4 Réponses :


-1
votes

Pour conserver le dernier élément lorsque vous utilisez Array_Unique, vous devez inverser le tableau d'abord pour faire d'abord le dernier article.

array(4) {
  [0] => int(1)
  // Notice key 1 is missing with value 2
  [2] => int(5)
  [3] => int(2)
  [4] => int(9)
}


7 commentaires

C'est une solution, mais comme je l'ai dit ci-dessus, je devrais garder la commande identique, je ne suis pas autorisé à modifier l'ordre des valeurs, il s'agit d'une question dans un test de codingame


Ne semble pas fonctionner pour l'index numérique: - 3v4l.org/dzqnd (BTW Je ne suis pas malade -électeur)


@Anantsingh --- alivetodie qui est parce que avec une matrice indexée, Array_Reverse ne conserve pas la clé. En réalité, cela fonctionne, il conserve la valeur correcte, mais les touches sont réinitialisées. Voir l'exemple ici: 3v4l.org/0b1ko le 2 après 5 est conservé mais les clés sont réinitialisées


@Anantsingh --- alivetodie, je suppose que mes questions ne sont pas assez claires, je ferai le prochain test, et à ce moment-là, je vais avoir tous les détails et quel code j'ai écrit et quel résultat exactement que j'ai obtenu, d'écrire une question très claire . Merci


@Omarelrafhi que voulez-vous dire avec ordre? Est-ce que ça clés? Il est très important que vous utilisiez le libellé correct ou expliquer en détail ce que vous voulez dire. Parce que la commande et les clés ne sont pas les mêmes.


@Andreas vous avez raison, je n'ai pas fait attention à cela, en réalité, c'est l'ordre des valeurs que je ne peux pas changer. les clés que je peux.


@Omarelrafhi Dans ce cas, ma réponse devrait fonctionner. (L'un d'eux).



-1
votes

Une autre solution pouvant aider, ce que je ne recommande pas est de remplacer la capacité de la mémoire par défaut. Vous pouvez le faire en utilisant ceci: xxx

lecture supplémentaire: http://php.net/memory_limit


0 commentaires

0
votes
$a=array(7,6,4,3,3,4,9);
$count = count($a);
$c = [];
for($i=0;$i<count($a);$i++){
  if(!in_array($a[$i],$c)){
     array_push($c,$a[$i]);
  }
}
 print_r($c);

0 commentaires

0
votes

Votre code fonctionne bien. Je suis donc à 100% sûr que vous pensiez à tort que la dernière valeur est omise. En fait, il est supprimé car il est répété et vous avez demandé à toutes les valeurs dupliquées à supprimer en exécutant array_unique () code>. Pour un test simple exécutez ce code et vérifiez si vous voyez ces problèmes à nouveau.

function rmrepeat ($array) {
    $array2 = array_unique($array); 
    return $array2; 
} 

$a = [];
for($i=0;$i<1000;$i++){
    array_push($a, $i);
}

echo "Before removing duplicates: ", (string)count($a), PHP_EOL;

$a = rmrepeat($a);

echo "After removing duplicates: ", (string)count($a), PHP_EOL;


0 commentaires