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