如果数组未返回任何结果,则不显示结果消息

时间:2015-01-25 16:18:24

标签: php arrays

我有一个名为ShowRecords($sql)的函数,在我有这段代码的函数中:

function ShowRecords($sql) {
    $rs=mysql_query($sql,$conn);
    while($result = mysql_fetch_array($rs)) {
        $results[] = $result;
    }
    return array("results" => $results, "PageNavi" => $table_display);
}

我有很多页面,每个页面都有这个foreach循环:

$array = ShowRecords($sql);
foreach($array["results"] as $porting) {
    //display results
    echo $porting["sequence"];
}

如果没有返回任何内容,显示一条消息说没有结果的最佳方式(在函数中)是什么?我尝试过使用mysql_num_rows,但是foreach循环显示错误说无效参数

有没有办法我仍然可以返回$ results数组来包含每个数组项

例如,当我尝试$results[] = '';时,如果没有返回行,我仍然会收到错误消息:

Warning: Illegal string offset 'sequence' because `$results["sequence"]` does not exist

2 个答案:

答案 0 :(得分:1)

只是检查是否有结果才能进入while循环,这意味着如果至少有一行有结果,否则没有结果:

if( mysql_num_rows($rs) > 0 ) {
    while($result = mysql_fetch_array($rs)) {
        $results[] = $result;
    }
} else {
    return array("results" => "No results");
}

这种方式在每个页面上没有结果时,foreach的查询只会包含一个带有文字"No results"的项目。

请注意mysql已弃用,您可能应该使用mysqli

答案 1 :(得分:1)

这只是一个快速表示,但您应该对页面本身进行一些检查,而不仅仅是在函数中。您只能在页面上执行此操作:

$array = ShowRecords($sql);
if (is_array($array['results'])) {
    foreach($array["results"] as $porting) {
        //display table and results here...
    }
}

我就是这样做的。如果没有结果,我会让函数返回false或抛出异常。

$rs=mysql_query($sql,$conn);
if (!$rs or !mysql_num_rows($rs)) {
    return false;
}
while($result = mysql_fetch_array($rs)) {
    $results[] = $result;
}
return array("results" => $results, "PageNavi" => $table_display);

然后我会检查以确保在执行foreach循环之前$array不是假的。

if ($array = ShowRecords($sql)) {
    foreach($array["results"] as $porting) {
        //display table and results here...
    }
}
else {
    echo "No results!";
}