如何将函数结果收集到一个数组并返回此数组?

时间:2011-09-23 15:57:28

标签: php mysql

我的php功能看起来像

function generateTour ($lang, $db)
{
    echo '<table border="0" cellpadding="0" cellspacing="0" width="100%">';
    $title='title_'.$lang;
    $txt='txt_'.$lang;
    $result = $db->query("SELECT id, $title, $txt FROM 1_table");
    $count= $result->num_rows;
    $i=1;
    while($row=$result->fetch_object())
    {
    if($i%3==0) echo '<tr>'; 
    echo '<td width="33%">
    <div class="tour_item" style="background-image:url(core/content/img/pages/1/slide/'.$row->id.'.png)">
    <div class="tour_item_title"><a href="?id='.$row->id.'">';
    echo '</a></div><div class="tour_item_text"><a href="?id='.$row->id.'"></div>
    </div>';
    if($i==$count-1) echo '</td></tr>'; 
    else if($i%3==0) echo '</td></tr><tr>'; 
    $i++;
}
    echo '</table>';
}

如你所见,它逐行回应结果。不是一次全部。我想将所有变量收集到一个数组并返回此数组。可能吗?怎么做?

请不要发表关于安全漏洞的想法等等。我正在针对sql注入过滤$title, $txt varibales。 (我有可能字段名称的数组。我的过滤器函数每次检查theese变量的值。)

3 个答案:

答案 0 :(得分:0)

$data = array();
while ($row = $result->fetchObject()) {
   $data[] = $row;
}

是在数组中缓存结果集的绝对最基本的方法。您只需将其修改为存储生成的html。

答案 1 :(得分:0)

试试这个:

function generateTour ($lang, $db)
{
    $output = '<table border="0" cellpadding="0" cellspacing="0" width="100%">';
    $title='title_'.$lang;
    $txt='txt_'.$lang;
    $result = $db->query("SELECT id, $title, $txt FROM 1_table");
    $count= $result->num_rows;
    $i=1;

    while($row=$result->fetch_object())
    {
        if($i%3==0)
        {
            $output .= '<tr>';
        }

        $output .= '<td width="33%">
        <div class="tour_item" style="background-image:url(core/content/img/pages/1/slide/'.$row->id.'.png)">
        <div class="tour_item_title"><a href="?id='.$row->id.'">
        </a></div><div class="tour_item_text"><a href="?id='.$row->id.'"></div>
        </div>';

        if($i==$count-1)
        {
            $output .= '</td></tr>';
        }
        else if($i%3==0)
        {
            $output .= '</td></tr><tr>';
        }
        $i++;
    }
    $output .= '</table>';

    return $output;
}

修改 现在,阅读代码更容易。此解决方案将所有内容放在一个变量中。你不需要数组。

答案 2 :(得分:0)

您可以使用ob_start()ob_get_clean()将所有输出缓冲到变量中,然后输出该变量,如下所示:

ob_start();
print "Hello"; // Prints to buffer instead of screen
$out = ob_get_clean(); // Contains: Hello
echo $out; // Prints: Hello