2011-07-04 99 views
0

我工作的一个网站形象标签系统上,我有:的foreach在return语句中

function formatImage($url, $description, $tags){ 

if(empty($description)){ 

    $description = "<i>No description avaliable.</i>"; 

} 

$tags = array("One", "Two"); 
$added = "May 23, 2011"; 

return ' 
    <div id="single" class="image"> 
     <div id="image"> 
      <img src="'.$url.'" /> 
     </div> 
    </div> 

    <div id="meta"> 

     <dl> 
      <dt>Description</dt> 

      <dd>'.$description.'</dd> 
      <dt>Added on</dt> 
      <dd>'.$added.'</dd> 
      <dt>Tagged</dt> 
      <dd id="tags">'. 
       foreach($tags as $tag){ 
        return '<a href="/tagged/'.$tag.'">'.$tag.'</a>; 
       } 
       .' 
      </dd> 
     </dl> 

    </div>'; 

然后在functions.php中越往下:

function pullImage($id){ 

    dbCon(); 

    $sql = "SELECT * FROM images WHERE id='$id'"; 
    $result = mysql_query($sql); 
    $row = mysql_fetch_assoc($result); 

    $url = $row['url']; 
    $description = $row['description']; 

    //Tags 
    $sql = "SELECT * FROM tags WHERE itemid='$id'"; 
    $result = mysql_query($sql); 

    $tags = array();   

    while($row = mysql_fetch_assoc($result)){ 

     array_push($tags, $row['tag']); 

    } 

    //$tags = $tags; 

    $image = formatImage($url, $description, $tags); 

    echo $image; 

} 

而且我遇到的问题是format函数的return语句中的foreach。我对如何完成这项工作感到非常困惑。一个人如何去回报一个函数?

+0

我只是没有。 – cweiske

回答

3

将在foreach早些时候在你的代码:

$tagList = array(); 
foreach($tags as $tag){ 
    $tagList[] = '<a href="/tagged/'.$tag.'">'.$tag.'</a>'; 
} 
return ' 
    <div id="single" class="image"> 
     <div id="image"> 
      <img src="'.$url.'" /> 
     </div> 
    </div> 

    <div id="meta"> 
     <dl> 
      <dt>Description</dt> 

      <dd>'.$description.'</dd> 
      <dt>Added on</dt> 
      <dd>'.$added.'</dd> 
      <dt>Tagged</dt> 
      <dd id="tags">'.implode(', ', $tagList).'</dd> 
     </dl> 
    </div>'; 
0

你可以使用输出缓冲在你的函数是这样的:

function formatImage($url, $description, $tags){ 
    //... 
    ob_start(); 
    ?><div etc... 
    ... 
    <?php 
    foreach (...) { 
     ?><a href="...">...<?php 
    } 
    $output .= ob_get_contents(); 
    ob_end_clean(); 

    return $output; 
} 

这可能会影响到任何现有的输出(取决于您的应用程序设置因此你可能需要在输出任何东西之前调用formatImage(),可能通过将页面包装在某种View容器中(比如像CakePHP或CodeIgniter这样的MVC框架如何工作)。