2009-07-27 5 views
0

utilisant PHP ..PHP - Y at-il un moyen de vérifier toutes les valeurs dans un tableau

Voici ce que j'ai .. Je vais expliquer tout ça et peut-être quelqu'un peut me aider avec la logique et peut-être montrez-moi dans la bonne direction.

J'ai un système de messagerie sur lequel je travaille. Dans la partie cc, je permets à l'utilisateur de séparer les valeurs par un point-virgule, comme suit: 1; 2; 3; 4 ...

Lorsque ces valeurs sont passées à ma fonction, j'utilise exploser pour obtenir les dans un tableau. Ce que je veux faire, c'est d'abord vérifier. Je veux d'abord m'assurer que le format est correct et que chaque valeur est correctement séparée. Sinon, je devrais montrer une erreur. Une fois cela fait, je veux m'assurer que chaque nombre est réellement valide. Je peux interroger la base de données, mettre les reslts dans un tableau et pensais utiliser la fonction in_array() pour vérifier cela mais je ne suis pas certain que cela fonctionnera. Quelqu'un peut-il m'aider s'il vous plaît avec la meilleure façon de gérer cela?

Merci.

EDIT:

Quelle est la meilleure façon de détecter une valeur fausse dans la liste CSV des valeurs?

+0

sont les valeurs que des chiffres? Pouvez-vous donner l'exemple le plus complexe de valeurs que vous aurez? –

Répondre

3

Afin de vérifier que chaque numéro était correct seperated, vous voulez vérifier qu'il n'y a pas d'espace dans la réponse. Donc, quelque chose comme cela devrait fonctionner:

 
$text = trim($id); 
if(strpos(" ", $id) !== false) 
{ 
    //error 
} 

Ensuite, pour vérifier les valeurs, il est très simple

 
if(!in_array($id, $database_ids)) 
{ 
    // error 
} 

Enfin, si vous utilisez uniquement des valeurs numériques, vérifiez que l'identifiant est numérique

 
if(!is_numeric($id)) 
{ 
    //error 
} 

Pour moissonneuse-batteuse, l'envelopper dans un tableau

 
foreach($exploded_array as $key => $id) 
{ 
    $id = trim(id); 
    if(!is_numeric($id)) 
    { 
     //error 
    } 
    if(strpos(" ", $id) !== false) 
    { 
     //error 
    } 
    if(!in_array($id, $database_ids)) 
    { 
     // error 
    } 
} 

J'espère que le code était assez explicite où il a obtenu les variables, mais si vous avez besoin de moi pour expliquer plus, n'hésitez pas à demander.

+0

Salut Chacka, merci. Vous m'avez réellement aidé l'autre jour; Je me souviens de toi. Merci, vous l'avez cloué. –

+0

Mis à jour pour les valeurs numériques aussi. Aucun problème. Je garde la plupart de mes réponses dans un wiki personnel de toute façon, cela m'aidera dans les futurs programmes. –

+0

Chacha, juste curieux, à quoi sert la fonction strpos? Merci encore. –

0

Vous cherchez quelque chose comme:

foreach ($array as $value) { 
    //do checking here 
} 
+0

Kitson, je peux passer en revue les valeurs très bien, mais j'ai besoin d'aide avec la logique. –

+0

... et la meilleure pratique sur ce que je fais. Merci –

0

array_filter pourrait être une option.

+0

Salut, merci pour le lien, je n'ai jamais utilisé cette fonction auparavant mais cela peut certainement être utile. Merci d'avoir partagé. :) –

0

Comme whichdan suggéré, voici une implémentation qui repose sur array_filter():

<?php 
function checkValue($value) 
{ 
    $id = trim(id); 
    if(!is_numeric($id)) 
    { 
     return false; 
    } 
    if(strpos(" ", $id) !== false) 
    { 
     return false; 
    } 
    if(!in_array($id, $database_ids)) 
    { 
     return false; 
    } 
    return true; 
} 

$values = '1;2;3;4'; 
$values_extracted = explode(';', $values); 

if(count($values) == count(array_filter($values_extracted), 'checkValue')) 
{ 
    // Input was successfully validated 
} 
?> 
+0

Bonjour phidah, j'ai déjà implémenté les changements à l'exception de la fonction strpos. Qu'est-ce que c'est? BTW: Merci pour le code array_filter. –

Questions connexes