【问题标题】:php implode function empty array is not workingphp内爆函数空数组不起作用
【发布时间】:2018-05-05 10:01:04
【问题描述】:

我正在尝试从查询中获取数组中的值,然后我使用 implode 将数组值转换为字符串,直到它工作正常,

因此,在那之后,我在选择框中的另一个 where 条件查询中传递了该内爆变量,所以现在发生的情况是,如果数组为空,则选择框正在消失,谁能帮我解决这个问题..

这是我的代码

<select name="course1id" class="form-control" required> 
                            <?php
                            $r = array();
                            $query = "SELECT course1id,course2id FROM mdl_course_relation";
                            $result = $DB->get_records_sql($query);
                            foreach ($result as $res) {

                                $r[] = $res->course1id;
                                $r[] = $res->course2id;

                            }


                            $courseids = implode(",", $r);
                            //$where = '';

                            //if (sizeof($r))

                                //$where .= 'AND id NOT IN($courseids)';

                            ?> 


                            <?php
                            $sql = "select id,fullname from {course} WHERE id!=1 AND id NOT IN($courseids)";


                            $courses = $DB->get_records_sql($sql);
                            ?> 

                            <option value="">Choose Course</option> 
                            <?php
                            if (sizeof($courses)): foreach ($courses as $row):
                                    $coursename = $row->fullname;
                                    ?> 
                                    <option value="<?php echo $row->id . '|' . $row->fullname; ?>"><?php echo $row->fullname; ?></option> 
                                    <?php
                                endforeach;
                            endif;

                            ?> 
                        </select>

【问题讨论】:

  • 如果您的数组为空,那么您的查询执行将失败。如果数组不为空,则添加不。
  • 我必须在哪里添加。你能解释一下吗
  • 由于你总是排除 course id 1,你也可以在 $r 的数组中加 1。这永远不会破坏您的查询

标签: php mysql


【解决方案1】:

你需要检查空数组

像这样更新代码

$courseids = implode(",", $r);
$where = '';

if (count($r)>0)
{
    $where = "AND id NOT IN($courseids)";
}
$sql = "select id,fullname from {course} WHERE id!=1 $where";
$courses = $DB->get_records_sql($sql);

【讨论】:

  • 如果没有课程链接的下拉菜单很好,你的逻辑是有效的..但是如果有课程链接的下拉菜单不会出现
  • 即使我在尝试使用 sizeof 时也遇到了同样的问题,我也尝试使用 array_filter 也无法正常工作
  • $where = "AND id NOT IN($courseids)";这里将单引号替换为双引号
猜你喜欢
  • 2013-05-27
  • 2013-05-15
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2011-03-17
  • 2022-01-01
  • 2011-07-12
相关资源
最近更新 更多