Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在While循环中构建索引PHP数组_Php_Mysql_Arrays_Indexing - Fatal编程技术网

在While循环中构建索引PHP数组

在While循环中构建索引PHP数组,php,mysql,arrays,indexing,Php,Mysql,Arrays,Indexing,我正在尝试将自己的数据(目前仅显示在各种表和KPI指标块中)格式化为图形框架所需的格式。本质上,我希望我的一些值成为图形生成脚本的X和Y数据 这是期望的结果(从中生成图形/图形点的数组示例): $dataPoints=array( 数组(“x”=>1,“y”=>41,标签=>18/07/19”), 数组(“x”=>2,“y”=>35,标签=>19/07/19”), 数组(“x”=>3,“y”=>50,标签=>20/07/19”), 数组(“x”=>4,“y”=>45,标签=>21/07/19”)

我正在尝试将自己的数据(目前仅显示在各种表和KPI指标块中)格式化为图形框架所需的格式。本质上,我希望我的一些值成为图形生成脚本的X和Y数据

这是期望的结果(从中生成图形/图形点的数组示例):

$dataPoints=array(
数组(“x”=>1,“y”=>41,标签=>18/07/19”),
数组(“x”=>2,“y”=>35,标签=>19/07/19”),
数组(“x”=>3,“y”=>50,标签=>20/07/19”),
数组(“x”=>4,“y”=>45,标签=>21/07/19”),
数组(“x”=>5,“y”=>52,标签=>22/07/19”),
数组(“x”=>6,“y”=>68,标签=>23/07/19”)
);
我有以下代码,用于提取我需要的相关信息:

//构建图形数据点
//
$daysmax=31;
$daycounter=0;
而($daysmax>$daycounter){
$sql\u get\u day\u total\u events=“选择COUNT(*),date\u sub(curdate(),INTERVAL$daycounter day)作为tblticketlog中的日期1
其中DATE(DATE)=DATE_sub(curdate(),间隔$daycounter-day)
和((操作='New Support Ticket Open')
或(类似“状态更改为挂起%”的操作)
或(类似“状态更改为进行中%”的操作)
或(类似于“由%”作出的新通知单响应”);
$get\u day\u total\u events\u result=mysqli\u query($db$sql\u get\u day\u total\u events);
如果(mysqli_num_rows($get_day_total_events_result)>0){
而($row=$get\u day\u total\u events\u result->fetch\u assoc()){
$day_result_date=strottime($row['date1']);
$day_result_value=$row['COUNT(*)'];
}
}
$sql\u get\u day\u escs=“从升级中选择计数(*)
其中日期(esc_at)=日期(curdate(),间隔$daycounter-day)
并升级为1”;
$get\u day\u escs\u result=mysqli\u query($db2,$sql\u get\u day\u escs);
如果(mysqli\u num\u行($get\u day\u escs\u result)>0){
而($row=$get\u day\u escs\u result->fetch\u assoc()){
$day_escs_value=$row['COUNT(*)';
}
}
$day\u sla\u met=$day\u result\u value-$day\u escs\u value;
$day\u kpi\u pcnt=四舍五入(($day\u SLA\u met/$day\u结果值)*100),0);
$daycounter=$daycounter+1;
}
因此,为了总结这一点,我从$db中提取了30天(滚动)每天的总事件数,从$db2中提取了30天(滚动)每天的“升级事件”数。我还从$db查询中获取了日期

对于我的图表:
X=$daycounter(只是数据点的增量数字ID,从0开始,到30
Y=KPI百分比,仅使用$day\u KPI\u pcnt中的简单数学计算得出
标签=纯文本格式的日期对象

我想做的事
在循环之前,我使用以下命令初始化$datapoints数组:

$datapoints=array();

然后,就在循环底部的$daycounter+1行之前,我尝试将我的值推送到数组中的索引:

$datapoints = [];
while (...) {
    ...
    $datapoints[] = [
        'x' => $daycounter,
        'label' => date("d-m-Y",$day_result_date),
        'y' => $day_kpi_pcnt,
    ];
    ...
}
$datapoints[x]=$daycounter;
$datapoints[label]=日期(“d-m-Y”、$day\u result\u date);
$datapoints[y]=$day\u kpi\u pcnt;
但是,这只是以一个空图结束。如果我var_转储数组,我似乎会在一个空数组中得到我的结果的最后一行:

**Day: 30 -- 29-06-2019 - 6/6 - 100%**
array(3) { ["x"]=> int(30) ["label"]=> string(10) "29-06-2019" ["y"]=> float(100) } 

老实说,PHP数组和如何使用它们可能是我最薄弱的一门课。我真的很难对付它们,希望能得到一些指导,甚至一些关于我哪里出了问题的基本提示。谢谢。

你需要一个数组数组。首先,为所有结果创建一个数组(你已经有了它)和一个临时数组(这在循环之外)

然后使用数据创建一个临时数组,就像您所做的那样(这是在循环中):

然后将整个数组附加到循环内的datapoints数组中:

$temp_datapoint['x'] = $daycounter;
$temp_datapoint['label'] = date("d-m-Y",$day_result_date);
$temp_datapoint['y'] = $day_kpi_pcnt;
$datapoints[] = $temp_datapoint;

您所做的可能是这样的:

$datapoints = [];
while (...) {
    ...
    $datapoints[x] = $daycounter;
    $datapoints[label] = date("d-m-Y",$day_result_date);
    $datapoints[y] = $day_kpi_pcnt;
    ...
}
在每次循环迭代中,您都将使用新行值覆盖
$datapoints
数组。因此,只保留最后一行中的值。您需要的是将行添加到数组中:

$datapoints = [];
while (...) {
    ...
    $datapoints[] = [
        'x' => $daycounter,
        'label' => date("d-m-Y",$day_result_date),
        'y' => $day_kpi_pcnt,
    ];
    ...
}

“然后,就在循环底部$daycounter+1行之前,我试图将我的值推送到数组中的索引”-你在代码中的什么地方这样做?你可能在一个循环中一次又一次地重写数组。这是一个很常见的错误。@PaulSpiegel,你是对的,根据你下面接受的答案,我用“=”为循环迭代中的数据值设置了3个索引,因此每次都会覆盖该索引中以前的所有数据。您的答案清晰、正确,目前正在代码中运行。谢谢。这是您所问问题的正确答案,但一旦成功,您应该将其转交给以获得进一步帮助。在循环中构建数组,从business调用php的内置mysql函数代码,并在
语句中引入变量,如果
语句都是危险信号,那么应该有更好的方法。(在业务代码中作为字符串的SQL也是如此,但分离出来的难度更大。)@ShapeOfMatter我完全同意你的观点。还有很多工作要做。一个问题做的太多了。谢谢你@PaulSpiegel,这个答案行得通,尽管我后来发现数组是反向的,所以使用数组_reverse()现在一切都好了。答案被接受了。@ShapeOfMatter,老实说,我完全同意,我从来没有接受过任何正式的PHP培训,也没有与实际的PHP开发团队合作过。这些都是我自己自学完成的小项目。我100%感激并意识到我对PHP不太了解。而且,我觉得自己是一名合伙人deReview会毁了我的,哈哈。堆栈在noobs上已经够残忍的了!@ShapeOfMatter我确实找到了codereview,并发布了我的大部分工作代码。得到了一些反馈,并设法将我的处理时间从9秒以上缩短到488毫秒。因此,感谢各位的提醒。只是为了完整性,我尝试了这一点,而且它也很有效,但是被接受了答案更简洁(而且可能更准确)