2009-04-27 6 views
3

Existe-t-il un moyen de renvoyer le nombre total d'instances (cas) dans une instruction switch? Quelque chose comme ceci:En PHP, puis-je obtenir le nombre total d'instructions de cas dans une instruction switch?

$id = $_GET['id']; 

switch ($id) { 
    case "item1" : 
    $data = 'something1'; 
    break; 

    case "item2" : 
    $data = 'something2'; 
    break; 
} 

echo $data; 

Mais le raisonnement car il est il y a plusieurs fichiers avec ces instructions switch en eux, mais le nombre d'entre eux varient en fonction du fichier. J'aimerais idéalement pouvoir boucler ces instructions en augmentant le "id". Des idées sur si c'est possible?

+2

Je ne comprends vraiment pas ce que vous essayez de faire. Peut-être que si vous expliquiez le problème que vous essayez de résoudre, nous pourrions vous aider. Une solution consistant à «compter les déclarations de cas» semble ne pas être la meilleure approche. –

+0

Moi non plus, mais il me semble qu'il existe une meilleure solution pour tout ce que vous voulez faire. – Moutaz

+0

J'essaie juste de ne pas réécrire le code de quelqu'un d'autre qui fait généralement ce que nous voulons qu'il soit :) Je crée en fait un index de toutes les sections du site pour un moteur de recherche non-base de données. La personne qui a construit le site a utilisé jquery pour charger des parties de données à partir de certaines instructions de commutation. Jquery chargerait l'url du fichier php avec une variable ID passée dans son url, que le commutateur/cas retournerait les données correspondantes. Comme il n'y a pas de base de données, j'ai pensé faire une boucle sur les commutateurs et comparer une chaîne, elle pourrait alors retourner la bonne. C'est le résumé ... de meilleures idées? –

Répondre

1

Non sans modifier la valeur de $ id et supprimer les déclarations de rupture .. mais ce genre de défaites le but. Y a-t-il une raison pour laquelle vous devez savoir combien?

Je voudrais juste grep les fichiers que vous voulez en savoir plus sur

find -name '*php' | xargs grep 'case' 
7

Si vous êtes juste d'attribuer des valeurs basée sur une autre valeur que vous pouvez utiliser un array à la place:

$idToData = array(
    'item1' => 'something1', 
    'item2' => 'something2', 
); 
$data = 'default'; 
if (isset($_GET['id']) && array_key_exists($_GET['id'], $idToData)) { 
    $data = $idToData[$_GET['id']]; 
} 
echo $data; 

L'avantage d'un tableau est qu'il peut être extended et le nombre d'éléments peut être compté avec count()

+0

Était juste au milieu de l'écriture que, +1. Si tout ce qu'il y a ici est une corrélation de données $ id/$, un tableau ressemble au bon outil pour le travail. – zombat

1

Ah - Je pense que je vois ce que vous êtes fter. Ce que vous pouvez faire est d'ajouter un défaut: cas qui termine la boucle, plutôt que d'essayer de compter. Par exemple. La question est: pourquoi ne pas faire tout cela sans une boucle et des instructions de cas en mettant juste une instruction après l'autre?

+0

Je suis d'accord je pense que c'était la réponse qu'il était après, mais je ne comprends pas comment il va aider avec tous les autres fichiers XD Je suppose qu'il pourrait boucler l'appel de fonction sur chaque fichier tout en incrémentant l'ID. Ensuite, il pourrait simplement vérifier la condition de retour par défaut ou null s'il n'y en a pas. – Louis

1

Vous pouvez probablement faire ce que vous demandez avec token_get_all(), mais les chances sont que ce n'est pas vraiment la meilleure solution à votre problème réel.

0

OK, disons que l'URL ressemble à ceci:

somesite.com/ajax/getinfo.php?id=news

vous pouvez alors prendre _GET $ valeur [id] et le traiter avec un commutateur.

Si j'imaginais votre code correcly:

$section=$_GET[id]; 
switch($section) { 
case "1": 
break; 
. 
. 
. 
default: 

} 

Si ce n'est pas correct, donc pardonnez mon anglais. S'il vous plaît expliquer un peu plus, il reste un peu ambigu.

1

En fait, vous pouvez le faire de manière fiable en utilisant token_get_all(). Voici un exemple d'utilisation de cette fonction à find all the define() usages in a PHP file. Vous devrez créer une machine à états finis (similaire à la machine liée) pour rechercher les instructions switch, puis les instructions de requête subordonnées. Vous pouvez ou ne voulez pas vous assurer que vous gérez correctement les instructions switch imbriquées.

0

En fait, ce code fonctionne:

$i = 0; 
switch(something) 
{ 
    case "item".$i++: //something 
     break; 
    case "item".$i++: //something 
     break; 
    default: //something 
     break; 
} 
Questions connexes