任何人都可以帮助我。
我需要返回多个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;
}
}
答案 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;
}