2010-05-07 8 views
0

me reste que cette chaîne en PHP:Problème avec les tableaux

$data = '1;3;5;7;9'; 

Et le cycle:

for ($i=0; $i < count($someArray); $i++) 
{ 
    // If $i == any number in $data 
} 

Quelle est la plus rapide pour comparer i $ du cycle avec des chiffres dans la chaîne. Je dois vérifier que le compteur de cycles est en chaîne.

+0

COuld vous développez un peu plus sur votre question s'il vous plaît :-) Je ne sais pas exactement ce que vous demandez. – Flukey

+0

@Jamie, ouais, désolé, oublié à ce sujet. – Ockonal

Répondre

5

Juste exploser la $data dans son propre tableau

$data = '1;3;5;7;9'; 

$numbers = explode(";", $data); 

for($i=0; $i < count($someArray); $i++) 
{ 
    if(in_array($i, $numbers)) 
    { 
     // do something 
    } 
} 
1

Vous pouvez prendre un peu plus loin si vous êtes à la recherche pour les valeurs (aucune autre logique dans la boucle).

$data = '1;3;5;7;9'; 
$numbers = explode(";", $data); 

$result = array_intersect($numbers, range(0, count($someArray))); 

print_r($result); 
2

J'utiliser les chiffres comme clés pour un index:

$data = '1;3;5;7;9'; 
$index = array_flip(explode(';', $data)); 

Maintenant, vous pouvez simplement utiliser isset ou array_key_exists pour vérifier si ce nombre est en $data:

for ($i=0, $n=count($someArray); $i<$n; ++$i) { 
    if (array_key_exists($index, $i)) { 
     // $i is in $data 
    } 
} 

Vous peut même faire l'inverse, itérer les numéros $data et voir si elles sont dans la gamme de 0 à count($someArray) -1:

$data = '1;3;5;7;9'; 
$n = count($someArray); 
foreach (explode(';', $data) as $number) { 
    if (0 <= $number && $number < $n) { 
     // $number is in range from 0 to $n-1 
    } 
} 
+0

'array_key_exists' est-il plus fiable que' in_array'? – bschaeffer

+1

@bschaeffer: C'est plus efficace: 'isset' et' array_key_exists' devraient être O (1) alors que 'in_array' est O (n). – Gumbo

Questions connexes