这可能是一个愚蠢的问题,所以如果是这样,请放轻松。
我有一系列查询(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的一小部分,但是我需要能够在彼此的右边连接所有这些行。
e.g
可以产生的foreach
:
$first.$second1.$second2.$second3.$second4.$second5
这是否可行,是否可以将[i]和[i ++]添加到每个变量。
答案 0 :(得分: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', ... }
答案 1 :(得分: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
它们将在每个循环中连接。
答案 2 :(得分: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'];
}
&GT;
无需循环运行。这需要一些额外的时间来执行......
试试这样....
答案 3 :(得分:0)
使用空字符串
$string = '';
然后在每个for循环中使用此变量
foreach($array1 as $value){
$string.= $value['some_data'];
}
foreach($array2 as $value){
$string.= $value['some_data'];
}
使用此$ string作为最终结果
答案 4 :(得分: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);
?>