多次返回

时间:2014-05-07 13:06:40

标签: php function

任何人都可以帮助我。
我需要返回多个img,但是使用这个代码,只返回两个中的一个。 解决办法是什么。 提前谢谢。

$test = "/claim/img/box.png, /claim/img/box.png";


function test($test) 
{
            $photo = explode(',', $test);
            for ($i = 0; $i < count($photo); $i++)
                {

                    $returnas = "<img src=".$photo[$i].">";
                    return $returnas;
                }

}

3 个答案:

答案 0 :(得分:6)

这可能是了解array_map的好机会。

function test($test) {
    return implode("",array_map(function($img) {
        return "<img src='".trim($img)."' />";
    },explode(",",$test)));
}

许多功能使编写代码变得更加简单,而且它使用较低级别的代码也更快。


虽然我们处理学习的问题,但PHP 5.5为我们提供了generators。你可以在这里使用一个。例如:

function test($test) {
    $pieces = explode(",",$test);
    foreach($pieces as $img) {
        yield "<img src='".trim($img)."' />";
    }
}

yield是神奇发生的地方。这使您的函数表现得像一个生成器。然后你可以这样做:

$images = test($test);
foreach($images as $image) echo $image;

就我个人而言,我认为这个生成器解决方案比我先前给出的array_map更清晰,后者反过来比手动迭代更整洁。

答案 1 :(得分:1)

以这种方式修改代码

function test($test) 
{
    $returnas = '';
    $photo = explode(',', $test);
    for ($i = 0; $i < count($photo); $i++)
    {
        $returnas .= "<img src=".$photo[$i].">";
    }
    return $returnas;
}

您的代码无法正常工作,因为您立即返回循环内部。每种编程语言都支持&#34;只返回呼叫&#34;。在我的解决方案中,每次进入循环时都附加一个带有img标记的字符串,并在每张照片被传递后返回#34;进入循环

您甚至可以使用foreach()构造,当然

奖金回答

如果您不知道...之间的区别

for ($i = 0; $i < count($photo); $i++)

for ($i = 0, $count = count($photo); $i < $<; $i++)

嗯,在第一种情况下,您每次调用for时都会评估count($photo),而第二次只评估一次。

这可以用于优化porpuses(即使php,在内部,存储数组的长度,以便它可以在O(1)中访问)

答案 2 :(得分:0)

该函数在第一个return语句后中断。你需要在某个结构,例如数组中保存你想要返回的内容,然后返回它。

function test($test) 
{
    $result = array();
    $photo = explode(',', $test);
    for ($i = 0; $i < count($photo); $i++)
    {
        $returnas = "<img src=".$photo[$i].">";
        $result[] = $returnas;
    }
    return $result;
}