Php 数组中的数组不显示数据库准备的值

Php 数组中的数组不显示数据库准备的值,php,arrays,foreach,Php,Arrays,Foreach,我试图创建一个圆圈,并从数据库中获取数据。但它不显示值,而是打印绑定 function circle() { $sql = "SELECT count(projects.id) AS count, projects.status as status FROM user_projects INNER JOIN projects ON projects.id = user_projects.projec

我试图创建一个圆圈,并从数据库中获取数据。但它不显示值,而是打印绑定

function circle()
    {

        $sql = "SELECT count(projects.id) AS count, projects.status as status
                FROM user_projects
                    INNER JOIN projects ON projects.id = user_projects.project_id
                WHERE user_projects.user_id = :user_id
                AND projects.workspace = :current_workspace
                GROUP BY projects.status";


        $stmt = $this->db->prepare($sql);
        $stmt->execute(array(':user_id' => $this->id, ':current_workspace' => $this->userinfo['current_workspace']));
        //$stmt->debugDumpParams();
        $projectProcess = $stmt->fetch(PDO::FETCH_OBJ);
        //print_r($projectProcess);

        $total = $this->totalProjects();

        $arrProcessLable= [];
        $arrProcessPer = [];
        foreach ($projectProcess as $lable => $process){
            $arrProcessLable[]= $lable;
            $arrProcessPer[] = round(($process*100)/$total,2);
        }

        $arrProcessClass = ['text-success','text-primary','text-danger'];

        return ['a' => $arrProcessLable, 'b' => $arrProcessPer, 'c' => $arrProcessClass];
    }
数组打印“count”值,而不是像6之类的值。 它应该打印6个project.id计数

同样,它打印“状态”,不像“正在进行”或“保持”、“完成” 它应该打印6个“正在进行”的项目

到达:


您需要单独获取每一行。换句话说,您需要在循环中调用
fetch()
,以访问每一行(或者,您可以
fetchAll()
,但如果您打算在脚本的同一“层”上迭代/处理数据,这是不合适的)

见本参考资料:

您正在一行中迭代属性和值。但是,您应该迭代行并按属性名手动访问值

未经检验的建议:

while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
    $arrProcessLable[] = $row->status;
    $arrProcessPer[] = round(($row->count * 100) / $total, 2);
}

补充说明:

  • 您不需要将
    projects.status别名为status
    ,因为在结果集中,
    projects.status
    列将被赋予属性
    status
    ——表名将被忽略

  • MySQL具有合适的数学函数,允许您在php触及结果集之前执行所有计算。这可能是你感兴趣的事情

  • 最后,如果您只想获取一次
    ->fetchAll(PDO::fetch_KEY_PAIR)
    看起来很有用,因为您将状态与其计数配对。参考以上链接并向下滚动


您需要单独获取每一行。换句话说,您需要在循环中调用
fetch()
,以访问每一行(或者,您可以
fetchAll()
,但如果您打算在脚本的同一“层”上迭代/处理数据,这是不合适的)

见本参考资料:

您正在一行中迭代属性和值。但是,您应该迭代行并按属性名手动访问值

未经检验的建议:

while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
    $arrProcessLable[] = $row->status;
    $arrProcessPer[] = round(($row->count * 100) / $total, 2);
}

补充说明:

  • 您不需要将
    projects.status别名为status
    ,因为在结果集中,
    projects.status
    列将被赋予属性
    status
    ——表名将被忽略

  • MySQL具有合适的数学函数,允许您在php触及结果集之前执行所有计算。这可能是你感兴趣的事情

  • 最后,如果您只想获取一次
    ->fetchAll(PDO::fetch_KEY_PAIR)
    看起来很有用,因为您将状态与其计数配对。参考以上链接并向下滚动


您能再解释一下这部分吗?你说“它不显示值,它打印绑定”是什么意思?@Dharman它应该是数组([a]=>array([0]=>6[1]=>“正在进行”…那么你的foreach循环的目的是什么?只需返回原始的
$projectProcess
,而不返回循环。你能再解释一下这部分吗?你的意思是什么“它不显示值,而是打印绑定。”?@Dharman它应该是数组([a]=>array([0]=>6[1]=>“正在进行”…那么foreach循环的目的是什么?只需返回原始的
$projectProcess
,而不返回循环即可。