Беда с массивами - PullRequest
       11

Беда с массивами

0 голосов
/ 07 мая 2010

У меня есть такая строка в PHP:

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

И цикл:

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

Какой самый быстрый способ сравнить $ i из цикла с числами в строке. Я должен проверить, что счетчик циклов в строке.

Ответы [ 3 ]

5 голосов
/ 07 мая 2010

Просто взорвать $data в его собственный массив

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

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

for($i=0; $i < count($someArray); $i++)
{
    if(in_array($i, $numbers))
    {
        // do something
    }
}
2 голосов
/ 07 мая 2010

Я бы использовал цифры в качестве ключей для индекса:

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

Теперь вы можете просто использовать isset или array_key_exists, чтобы проверить, находится ли это число в $data:

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

Вы можете даже сделать обратное, повторить числа в $data и посмотреть, находятся ли они в диапазоне от 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
    }
}
1 голос
/ 07 мая 2010

Вы могли бы пойти дальше, если вы просто ищете значения (никакой дополнительной логики в цикле).

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

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

print_r($result);
...