阵列麻烦

时间:2010-05-07 18:59:38

标签: php arrays split

我在PHP中有这样的字符串:

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

并循环:

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

将循环中的$ i与字符串中的数字进行比较的更快方法是什么?我必须检查循环计数器是否为字符串。

3 个答案:

答案 0 :(得分:5)

$data爆炸到它自己的数组

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

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

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

答案 1 :(得分:2)

我会使用数字作为索引的键:

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

现在,您只需使用issetarray_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
    }
}

答案 2 :(得分:1)

如果您只是寻找值(循环中没有其他逻辑),您可以更进一步。

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

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

print_r($result);