2010-09-30 4 views
0

J'ai un tableau de tableaux comme celui-ci:Comment puis-je savoir si la valeur d'une clé de tableau est la valeur que je recherche?

$cart = Array ( 
[0] => Array ([TypeFlag] => S [qty] => 2 [denom] => 50 [totalPrice] => 100) 
[1] => Array ([TypeFlag] => V [qty] => 1 [denom] => 25 [totalPrice] => 25) 
[2] => Array ([TypeFlag] => C [qty] => 1 [denom] => 25 [totalPrice] => 25) 
) 

Est-il possible, à court de boucle à travers tous et vérifier un à la fois, pour déterminer si la valeur de typeflag pour l'un d'eux est S?

+0

Voulez-vous connaître tous ceux qui sont réglés sur "S", ou si juste au moins l'un d'eux est? – Psytronic

+0

Je voulais juste savoir si au moins l'un d'eux est, et les deux réponses postées ci-dessous m'a obtenu ce dont j'avais besoin. – EmmyS

Répondre

0

Essayez ceci:

foreach($cart as $key => $value) { 
    if ($value['TypeFlag'] == 'S') { 
     return $key; 
    } 
} 

Cela retournerait la clé du sous-réseau qui a une valeur de TypeFlagS. Toutefois, cela s'arrêtera une fois qu'il aura trouvé le premier sous-tableau correspondant à votre modèle de recherche. Vous ne savez pas quelle est votre sortie désirée et combien de résultats sont attendus. Si vous pouvez fournir plus d'informations, je peux vous donner un exemple plus précis.

+0

Utilise quand même une boucle, à moins que l'OP veuille juste éviter de boucler chaque niveau d'imbrication. – BoltClock

+0

Ah, ma mauvaise. J'ai lu * sorte de boucle * au lieu de * s ** h ** ort de boucle * o.O –

+0

@ BoltClock est une licorne - oui, j'essayais juste d'éviter de boucler à travers chaque niveau. Je n'ai même pas besoin de retourner la clé; Je ne fais que définir un booléen à true si l'un d'entre eux correspond. Bien que s'il y avait un moyen de le faire sans boucle, ce serait superfabuleux, aussi. – EmmyS

0

Étant donné une fonction qui renvoie le TypeFlag pour chaque élément de votre tableau:

function get_type_flag($item) { 
    return $item["TypeFlag"]; 
} 

Vous pouvez appliquer cette fonction à chaque élément du tableau:

$typeflags = array_map("get_type_flag", $cart); 

et voir si S est en ce tableau:

if (in_array("S", $typeflags)) { 
    ... 
} 
+0

Je vais jeter un coup d'oeil à celui-ci; Je n'ai jamais utilisé array_map auparavant. – EmmyS

+0

Je veux juste signaler (avant que quelqu'un d'autre!) Que cela va encore parcourir tous les éléments du tableau, afin de sortir le 'TypeFlag' pour chacun. Cette approche pour tester au moins un 'S' utilise le style de programmation fonctionnel, qui peut être un peu plus clair qu'une boucle' for' codée à la main, un drapeau (pour indiquer si vous avez trouvé un 'S') et un 'break' (pour arrêter l'itération une fois qu'un' S' est trouvé). –

Questions connexes