データベースに保存されたデータに基づいて人の推定努力をグラフ化できる Web アプリケーションを php と MySQL で実行しようとしています。
$luna_start = date('n', strtotime($row_task['data_i']));
$luna_end = date('n', strtotime($row_task['data_s']));
$luna_curenta=$luna_start;
$ultimazi_luna_curenta= cal_days_in_month(CAL_GREGORIAN, $luna_curenta,"2012");
while ($luna_curenta<=$luna_end){
//construieste vectorul
for ($i = 1; $i <= $ultimazi_luna_curenta; $i++) {
$data_curenta= date("Y-m-d", mktime(0, 0, 0, $luna_curenta, $i, 2012));
if (($data_curenta>=$row_task['data_i'])&&($data_curenta<=$row_task['data_s'])){
$efort_a['a'.$row_task['task_id']][$data_curenta]=$efort_mediu;
}
}
$luna_curenta++;
}
グラフ化できるように配列を取得するためのすべての問題。配列 $efort_a は次のようになります。
Array(
[a19] => Array(
[2012-09-20] => 2.84
[2012-09-21] => 2.84
.......
[2012-10-21] => 2.84
[2012-10-22] => 2.84
)
[a22] => Array
(
[2012-10-01] => 0.1
[2012-10-02] => 0.1
.....
[2012-11-05] => 0.1
[2012-11-06] => 0.1
[2012-11-07] => 0.1
......
[2012-11-25] => 0.1
......
[2012-11-30] => 0.1
)
[a16] => Array
(
[2012-10-08] => 4
[2012-10-09] => 4
[2012-10-10] => 4
[2012-10-11] => 4
......
[2012-10-18] => 4
[2012-10-19] => 4
)
)
さらに、もう少し配列処理を行っています。
extract($efort_a);
$graf_data= array_add($a19,$a22,$a16);
$data = new GoogleChartData($graf_data);
$chart->addData($data);
このすべてのコードの問題は、それが動的なものではないということです。配列 a19、a22、a16 は静的に名前が付けられ、この特定のケースでは、ユーザーには 3 つのタスク (タスク ID 19、22、および 16) しかありませんでしたが、ユーザーに複数のタスクがある場合はどうなるでしょうか?
- 問題は、このコードを動的なものにする方法がわからない関数として再編成できるかどうかです。
- すべてのユーザーの努力をグラフ化する機能を実行することは可能でしょうか (1 つのグラフ、複数の行 - 各ユーザーに 1 つ)
ps: キーに基づいて配列を追加する関数は次のとおりです。
function array_add($a1, $a2) {
// adds the values at identical keys together
$aRes = $a1;
foreach (array_slice(func_get_args(), 1) as $aRay) {
foreach (array_intersect_key($aRay, $aRes) as $key => $val) $aRes[$key] += $val;
$aRes += $aRay;
}
return $aRes;
}
======================================== 2日目 ======= ================
少し考えた後、もう一度試してみようと思いました...したがって、配列のキーに動的に名前を付けるためには、インクリメントをどこで停止するかを知る必要があります。
$sql_nrtask='SELECT *, COUNT(user) AS nr_task
FROM task
WHERE user="ASD"
ORDER BY data_i ASC
';
$query_nrtask= mysql_query($sql_nrtask) or die ('rrr');
while ($row_nrtask= mysql_fetch_array($query_nrtask)) {
$nr_task=$row_nrtask['nr_task']; // no we know how many sub-arrays we'll have
}
for ($j++;$j<=$nr_task;$j++){
while ($luna_curenta<=$luna_end){
//construieste vectorul
for ($i = 1; $i <= $ultimazi_luna_curenta; $i++) {
$data_curenta= date("Y-m-d", mktime(0, 0, 0, $luna_curenta, $i, 2012));
if (($data_curenta>=$row_task['data_i'])&&($data_curenta<=$row_task['data_s'])){
$efort_a['$a'.$j][$data_curenta]=$efort_mediu;
}
}
$luna_curenta++;
}
}
問題は、$efort_a 内の配列を 2 つの条件でマージする方法がわからないことです。
- インデックスを同じ場所に保持し、値を追加する
- 新しい要素である新しいインデックスを追加する