2010-11-18 5 views
2

Salut laisse dire que j'ai ce tableau:Vérifier les éléments répétés tableau PHP (sinon vide)

$check_post = array(

$_POST["a_post"], 
$_POST["b_post"], 
$_POST["c_post"], 
$_POST["d_post"], 
$_POST["e_post"], 
$_POST["f_post"], 
$_POST["g_post"], 
$_POST["h_post"], 
$_POST["i_post"] 

); 

Je veux vérifier si des éléments de ce tableau sont répétées, de sorte que le mieux que je suis est la suivante:

if (count(array_unique($check_post)) < count($check_post)) 
    echo "Duplicate"; 
else 
    echo "NO Duplicate"; 

ce qui fonctionne très bien à l'exception du fait que si plus d'une zone de texte est laissé vide (ce qui est permis), il me donne FAUX.

Ce que je veux est de ne pas considérer les valeurs vides du tableau pour la (count(array_unique())

BTW J'ai essayé avec empty() et array_values($check_post), mais je ne peux pas la contourner.

Merci d'avance !! s'il vous plaît demander pour toute clarification nécessaire.

Répondre

8

Pour supprimer toutes les valeurs vides de la comparaison, vous pouvez ajouter array_diff():

if (count(array_unique(array_diff($check_post,array("")))) < count(array_diff($check_post,array("")))) 
+0

lui donner un je vais essayer! Merci!! – Trufa

+0

Je pense que OP veut que les vides contribuent à la quantité gauche mais pas à la droite –

+0

Ensuite, il obtiendra toujours "Dupliquer" quand il y a des valeurs vides. Je ne pense pas que ce soit ce qu'il voulait. – AndreKR

1
if (count(array_unique(array_filter(function(x) {return !empty(x)}, $check_post)) < count($check_post)) 
    echo "Duplicate"; 
else 
    echo "NO Duplicate"; 
2

Eh bien la façon dont vous avez est très bien, mais comme vous le dites, vous avez besoin d'enlever le vide entrées en premier.

$non_empty_check_post = array_filter($check_post, create_function('$item', 'return !empty($item);'); 

if (count(array_unique($non_empty_check_post)) < count($non_empty_check_post)) { 
    echo "Duplicate"; 
} else { 
    echo "NO Duplicate"; 
} 
+2

+1. Mais il n'est pas nécessaire de fournir une fonction de rappel à 'array_filter' lorsque vous voulez supprimer des espaces (ou des entrées qui évaluent' false') .Manuel dit "Si aucun callback n'est fourni, toutes les entrées d'entrée égales à FALSE seront supprimées. ":) – netcoder

+0

@netcoder Très vrai! array_filter ($ check_post) serait suffisant. – Orbling

2

filtre les blancs de votre tableau:

function no_blanks($val) { 
    // Do not use empty() here if you don't consider the string "0" as blank 
    return trim($val) !== ''; 
} 

$check_post = array_filter($check_post, 'no_blanks'); 

if (count(array_unique($check_post)) < count($check_post)) 
    echo "Duplicate"; 
else 
    echo "NO Duplicate"; 
+0

+1. Mais il n'est pas nécessaire de fournir une fonction de rappel à 'array_filter' quand vous voulez supprimer des espaces (ou des entrées qui évaluent' false'). Manuel dit "Si aucun rappel n'est fourni, toutes les entrées d'entrée égales à FALSE seront supprimées." :) – netcoder

+0

@netcoder: Mon callback ne vérifie strictement que la chaîne vide, car les chaînes contenant le chiffre zéro seront également purgées par 'array_filter()', ce qui peut aller à l'encontre des intentions de l'OP. J'ai utilisé 'array_filter()' dans une autre réponse que j'ai posté plus tôt :) – BoltClock

+0

Ah, je vois ce que vous avez fait ici. Logique! – netcoder

Questions connexes