0

这可能是一个愚蠢的问题,所以如果是这样,请放轻松。

我有一系列返回多维数组的查询(MySQL)。

然后,我使用这些数组项在 foreach 循环中的字符串中填充变量。

然后我需要这个字符串来填充一个 javascript 图表,以便数据的格式是完美的。这个想法适用于 1 个多维数组。

然而。要制作多个图表(例如比较折线图),我需要在同一行中表示所有数据。

所以我需要做的是如果可能的话将行合并到数组的行,而不是将其添加到末尾。

我会告诉你我的工作:

foreach ($graph_month as $month) :
        $first .= ' { year: "'.$month['month'].'",';
        endforeach;

        foreach ($graph_data1 as $data) :
        $second1 .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
        endforeach;

        foreach ($graph_data2 as $data) :
        $second2 .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
        endforeach;

        foreach ($graph_data3 as $data) :
        $second3 .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
        endforeach;

        foreach ($graph_data4 as $data) :
        $second4 .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
        endforeach;

        foreach ($graph_data5 as $data) :
        $second5 .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
        endforeach;

所以每个 foreach 都填充了一小部分所需的 javascript,但是我需要能够在彼此的右侧连接所有这些行。

例如

aforeach可以产生:

$first.$second1.$second2.$second3.$second4.$second5

这可能吗,是否可以将 [i] 和 [i++] 添加到每个变量。

4

5 回答 5

2

首先,您可以foreach通过生成如下变量来消除多余的行:

foreach ($graph_month as $month):

    for ($i = 1; $i <=5; $i++) {
        //$graph_data$i becomes $graph_data1, then $graph_data2 etc.
        foreach ($graph_data$i as $data) :
            $variable .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
        endforeach;
    }

// and so on
endforeach;

根据您的要求,此脚本的结果是以下形状:

{year: month, title: value title: value

我们可以像这样稍微调整一下:

foreach ($graph_month as $month):

    $variable .= ' { year: "'.$month['month'].'",';

    for ($i = 1; $i <=5; $i++) {
        //$graph_data$i becomes $graph_data1, then $graph_data2 etc.
        foreach ($graph_data$i as $data) :
            $variable .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
            if ($i != 5) {
                $variable .= ", ";
            }
        endforeach;
    }

    $variable .= 

// and so on
endforeach;

它变成:

{ year: month, 'title': 'value', 'title': 'value', ... }

于 2012-09-06T14:24:22.910 回答
1

您可以放置​​相同的变量:

foreach ($graph_month as $month) {
    $variable .= ' { year: "'.$month['month'].'",';
}

foreach ($graph_data1 as $data) {
    $variable .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
}

foreach ($graph_data2 as $data) {
    $variable .= ' "'.$data['title'].'": '.$data['totalValue'].' ';
}

// and so on

它们将在每个循环上连接。

于 2012-09-06T14:14:32.623 回答
0

你可以像这样使用for循环......

<?php 

for($i=0;$i<count($graph_month);$i++)
{
    $all_values1 = $graph_data1[$i]['title'] . $graph_data1[$i]['totalValue'];
    $all_values2 = $graph_data2[$i]['title'] . $graph_data2[$i]['totalValue'];
    $all_values3 = $graph_data3[$i]['title'] . $graph_data3[$i]['totalValue'];
    $all_values4 = $graph_data4[$i]['title'] . $graph_data4[$i]['totalValue'];
    $all_values5 = $graph_data5[$i]['title'] . $graph_data5[$i]['totalValue'];
}

?>

无需运行也可以 for 循环。执行需要一些额外的时间...

试试这样......

于 2012-09-06T14:17:25.180 回答
0

使用空字符串

$string = '';

然后将此变量与每个 for 循环一起使用

foreach($array1 as $value){
$string.= $value['some_data'];
}

foreach($array2 as $value){
$string.= $value['some_data'];
}

使用这个 $string 作为最终结果

于 2012-09-06T14:19:09.310 回答
0

让 PHP 担心 JSON 格式只是正确构建对象。

<?php

$tojson = array(
     0 => array(),
     1 => array(),
     2 => array(),
     3 => array(),
     4 => array(),
     5 => array()
);

foreach($graph_month as $month)
    $tojson[0]['year'] = $month['month'];

foreach($graph_data1 as $data)
    $tojson[1][$data['title']] = $data['totalValue'];

foreach($graph_data2 as $data)
    $tojson[2][$data['title']] = $data['totalValue'];

foreach($graph_data3 as $data)
    $tojson[3][$data['title']] = $data['totalValue'];

foreach($graph_data4 as $data)
    $tojson[4][$data['title']] = $data['totalValue'];

foreach($graph_data5 as $data)
    $tojson[5][$data['title']] = $data['totalValue'];

$json = json_encode($tojson);

?>
于 2012-09-06T14:27:22.433 回答