使用x索引循环PHP数组,但总是返回3个结果

时间:2014-07-22 10:20:59

标签: php arrays loops

我有一个随机数字的数组。它可以包含一个单词作为最小值或超过10个单词。例如:

$words = array (
 0 => 'This',
 1 => 'is',
 2 => 'my',
 3 => 'word'
)

现在,假设我想从这个数组中回显6个单词,当我们到达数组末尾时重新开始。我希望逻辑是这样的

for ($i=0; $i < 6 ; $i++) { 
    //if $words[$i] exist, print it, else reset the array and start over until we reach all 6
}

我希望结果是:“这是我的话,这是”

我很难弄清楚这个数学。任何帮助将非常感激!

由于

8 个答案:

答案 0 :(得分:2)

试试这个:

$words       = array('first', 'second', 'third');
$result      = '';
$index       = 0;
$words_count = count($words);

for ($i = 0; $i < 5; ++$i) {
    $result .= ' ' . $words[$index];
    ++$index;
    if ($index >= $words_count) {
        $index = 0;
    }
}

die(var_dump($result));

答案 1 :(得分:2)

要处理if $words[$i] exist, print it, else reset the array,我会使用更整洁的$i % count($array)

$array = array(
    '0' => 'This',
    '1' => 'is',
    '2' => 'my',
    '3' => 'word'
);

for ($i = 0; $i < 6; $i++) {
    echo $array[$i % count($array)] . ' ';
}

// "This is my word This is "

或者如果您想要问题中指定的确切输出(最后没有空格),我可能会这样做

$string = '';
for ($i = 0; $i < 6; $i++) {
    $string .= $array[$i % count($array)] . ' ';
}

echo trim($string);

// "This is my word This is"

或者像

这样的东西
echo $array[$i % count($array)] . ($i == 5 ? null : ' ');

// "This is my word This is"

答案 2 :(得分:1)

您的数组定义错误,首先:

$words = array (
  0 => 'This',
  1 => 'is',
  2 => 'my',
  3 => 'word'
);

现在打印它可以做到:

for ($i=0; $i < 6 ; $i++) {
  if(isset($words[$i])) { echo $words[$i] . ' '; }
}

对于更奇怪的要求:

for ($i=0; $i < 6; $i++) { 
    echo $words[$i % count($words)], ' ';
}

答案 3 :(得分:1)

不需要第二个变量进行迭代的最优雅的解决方案可能是使用模运算符:

for ($i=0; $i < NUMBER_OF_WORDS ; $i++) { 
    echo $words[$i % count($words)] . ' ';
}

这将是您的数组echo的{​​{1}} NUMBER_OF_WORDS个单词,并且一旦使用了数组的所有单词,就会再次从索引0开始。

答案 4 :(得分:0)

试试这样的事情:

$n = 0;
for ($i=0; $i < 6 ; $i++) { 
    echo $words[$n];
    $n++;
    if($n == count($words){
        $n -= count($words);
    }
}

如果到达数组的末尾,它会将$ n重置为零;

答案 5 :(得分:0)

for($i=0; $i<6; $i++) {
  if($i >= sizeOf($words)) {
    echo $words[$i % sizeOf($words)];
  }
  else { echo $words[$i]; }
}

应该做的伎俩。

答案 6 :(得分:0)

for ($i = 0; $i < 6 ; $i++) {
    if(!empty($words[$i])) 
        echo $words[$i];
    else
        for($j = 0 ; $j <= $i; $j++){
            echo $words[$j];
        }
}

答案 7 :(得分:0)

试试这个:

for ($i=0; $i < 6 ; $i++) { 
    echo $words[$i%(sizeof($words))];
}