【发布时间】:2014-10-23 18:34:51
【问题描述】:
目前我有这个工作代码,它将用从 db 获取的新值替换旧多维数组中的值。首先,我声明了 12 个月的数组。代码如下:
$base = Array(
Array
(
"month" => '2010-01',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-02',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-03',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-04',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-05',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-06',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-07',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-08',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-09',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-10',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-11',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
),
Array
(
"month" => '2010-12',
"KFC" => '0',
"PZH" => '0',
"SUB" => '0'
)
);
$result = mysqli_query($con, "SELECT brand,
DATE_FORMAT( date_time, '%Y' ) AS 'year',
DATE_FORMAT( date_time, '%m' ) AS 'month',
SUM(brand='PZH') AS PZH,
SUM(brand='KFC') AS KFC,
SUM(brand='SUB') AS SUB
FROM scan_report WHERE DATE_FORMAT( date_time, '%Y' ) =2010 AND id = ".$_SESSION['userinfo']['id']."
GROUP BY DATE_FORMAT( date_time, '%Y%m' )") or die(mysqli_error($con));
$num_rows = 1;
while ($row = mysqli_fetch_array($result)) {
foreach($base as &$value) {
echo $num_rows;
if ($value['month'] == $row['year'].'-'.$row['month']){
$value['KFC'] = $row['KFC'];
$value['PZH'] = $row['PZH'];
$value['SUB'] = $row['SUB'];
}
}
$num_rows++;
}
因为是多维数组,for each循环了12次。在回显期间,从 db 查询时,有 5 个匹配记录的 60 个循环。有没有比我目前正在做的更优雅的解决方案?有什么想法可以减少循环吗?
【问题讨论】:
标签: php arrays performance multidimensional-array