【问题标题】:Using a Loop Inside a Function在函数内部使用循环
【发布时间】:2011-03-08 03:13:24
【问题描述】:

我仍在学习函数及其工作原理。我知道我做错了什么,只是不知道如何解决它。我正在编写一个函数来从数据库中提取图像数据并将其返回到屏幕上。它可以工作,但如果有多个图像,它将仅返回最后一个图像。我知道问题是$project_image 仅返回最后一张图像,因为 while 循环的工作方式,但我的问题是我如何才能不使用 while 循环或让它向$project_image 变量添加多个图像.

精简功能

   function get_project_image($id,$type="thumb",$src="false",$limit=1){
    if($type =="main"){
        $project_image_qry = mysql_query(" SELECT i_name FROM `project_images` WHERE i_project_id = '$id' AND i_type= '2' LIMIT $limit " ) or die(mysql_error());
        $project_image="";
            while($project_image_row = mysql_fetch_array($project_image_qry)) {
            $project_image_result =  mysql_fetch_array ($project_image_qry);    

                if($src=="true"){
                    $project_image .= '<img src="'.admin_settings('site_url').admin_settings('image_main_dir').'/'.$project_image_result['i_name'].'" alt="project_image"/>';   
                    }
                else{
                    $project_image .= $project_image_result['i_name'];
                    }
            }
        }
    return $project_image;
    }

【问题讨论】:

    标签: php function while-loop


    【解决方案1】:

    您的while 条件很好,但您似乎在$project_image_row$project_image_result 中提取了两次,因此您将跳过所有其他图像。只需获取一次数组(在 while 循环中很好),然后在循环中使用 $project_image_result 而不是 $project_image_row 来引用该数组:

    while($project_image_result = mysql_fetch_array($project_image_qry)) {
        if($src=="true"){
            $project_image .= '<img src="'.admin_settings('site_url').admin_settings('image_main_dir').'/'.$project_image_result['i_name'].'" alt="project_image"/>';   
        }
        else{
            $project_image .= $project_image_result['i_name'];
        }
    }
    

    此外,默认情况下,您似乎告诉它只从数据库中请求一张图像。您有一个默认参数 $limit=1,并且您使用 SQL LIMIT 过滤结果,因此除非您将第四个参数传递给 get_project_image,否则 mysql_query 只会返回一个结果(您没有包括打电话给get_project_image,所以我不确定你是否处理了这个

    【讨论】:

    • 非常感谢!那效果很好。我相信您在上面的示例while 循环中使用$project_image_result 而不是$project_image_row,没什么大不了的。此外,关于您对默认限制的评论,我的函数调用看起来像 echo get_project_image($project_row['p_id'],"main","true",2); 我默认将其限制为一个,因为其他两种图像类型每种类型只有一个图像。再次感谢。
    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2020-06-16
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多