在PHP中用for迭代替换foreach

时间:2012-10-27 07:06:08

标签: php for-loop foreach iteration

问题:

我有一个foreach循环,非常适合拉图像,但是当我尝试用for循环替换它时,会破坏代码和图像。

PHP代码:

// Create counter
$i = 0;

// Set number of photos to show
$count = 5;

// Set height and width for photos
$size = '100';

// Show results
foreach ($media->data as $data) 
{
    // Show photo
    echo '<p><img src="'.$data->images->thumbnail->url.'" height="'.$size.'" width="'.$size.'" alt="Instagram bild"></p>';

    // Abort when number of photos has been reached
    if (++$i == $count) break;
}

所需解决方案:

用for替换foreach并在for循环中设置counter。这可能很容易,但由于某种原因,我现在完全陷入困境。

3 个答案:

答案 0 :(得分:2)

这是因为您的$media->data变量可以编入索引。

<?php
// Create counter
$i = 0;

// Set number of photos to show
$count = 5;

// Set height and width for photos
$size = '100';

// Show results
for ($i = 0; $i < $count; $i++) 
{
    $data = $media->data[$i];
    // Show photo
    echo '<p><img src="'.$data->images->thumbnail->url.'" height="'.$size.'" width="'.$size.'" alt="Instagram bild"></p>';
}

如果不是,则必须使用foreach而不是for,并在达到所需数量的照片时退出循环:

<?php
// Create counter
$i = 0;

// Set number of photos to show
$count = 5;

// Set height and width for photos
$size = '100';

// Show results
foreach ($media->data as $data) 
{
    // Show photo
    echo '<p><img src="'.$data->images->thumbnail->url.'" height="'.$size.'" width="'.$size.'" alt="Instagram bild"></p>';

    // Abort when number of photos has been reached
    if (++$i == $count) 
        break;
}

同样如下面的评论中所写,如果图像少于5张,最好检查$media->data变量的大小。你可以做类似的事情:

$count = (count($media->data) < 5)? count($media->data): 5;

答案 1 :(得分:1)

如果在进入循环之前确定正确的计数,则可以自己检查每次迭代,从循环代码中分离初始化代码。

这样的count函数和索引将起作用,假设$media>data是一个带有数字索引的数组。

但我必须承认,我不知道你为什么会这样做。 foreach循环同样简单。

// Set number of photos to show
$count = count($media->data);
if ($count > 5)
    $count = 5;
// Set height and width for photos
$size = '100';

// Show results
for ($i = 0; $i < $count; $i++)
{
    // Use $i as an index to get the right item.
    $data = $media->data[$i];
    echo '<p><img src="'.$data->images->thumbnail->url.'" height="'.$size.'" width="'.$size.'" alt="Instagram bild"></p>';
}

答案 2 :(得分:0)

$limit = 5;

for($i = 0; $i < count($media->data) && $i < $limit; $i++) {
    echo '<p><img src="'.$media->data[$i]->images->thumbnail->url.'" height="'.$size.'" width="'.$size.'" alt="Instagram bild"></p>';
}