我有这个查询(它正在运行):
$filesQuery = "SELECT COUNT( cs_file.iduser ) AS newFile, DATE( cs_file.add_date ) AS
dateAdded
FROM cs_file
INNER JOIN cs_team_has_user ON cs_team_has_user.iduser = cs_file.iduser
INNER JOIN cs_portal_has_team ON cs_portal_has_team.idteam = cs_team_has_user.idteam
WHERE cs_file.add_date >= DATE(NOW()) - INTERVAL {$range} DAY
AND cs_file.isImage = 0
GROUP BY DATE( cs_file.add_date )
WITH rollup";
查询给出了我的结果:
[0]=>
array(2) {
["newFile"]=>
string(2) "12"
["dateAdded"]=>
string(10) "2016-03-23"
}
[1]=>
array(2) {
["newFile"]=>
string(1) "2"
["dateAdded"]=>
string(10) "2016-04-01"
}
[2]=>
array(2) {
["newFile"]=>
string(2) "10"
["dateAdded"]=>
string(10) "2016-04-22"
}....
我需要做的是使 dateAdded 成为一个键,将 newFile(计数)作为一个值。像这样:
[
'2016-03-23' => '12',
'2016-04-01' => '2',
'2016-04-22' => '10'
]
查询可以实现吗?或者有一些更有效的方法,然后使用foreach循环?
答案 0 :(得分:1)
不,我不认为可以使用Mysql查询完成。您可以使用foreach
:
$output = array();
foreach($output as $val){
$output[ $val['dateAdded'] ] = $val['newFile'];
}
print_r($output);
答案 1 :(得分:1)
你可以使用<?php
$r = array(
array('idx'=>22, 'val'=>55),
array('idx'=>33, 'val'=>77),
array('idx'=>44, 'val'=>44),
);
$result = array();
array_map(function($val) use (&$result) {
$result[$val['idx']] = $val['val'];
}, $r);
print_r($result);
封闭:
netstat -apn | grep 27777
答案 2 :(得分:1)
不需要foreach只需使用array_column
array_column - 返回输入数组中单个列的值。
array_column()返回输入的单个列中的值,由column_key标识。 (可选)可以提供index_key,以通过输入数组的index_key列中的值索引返回数组中的值。
$final_array = array_column($result, 'newFile', 'dateAdded');
答案 3 :(得分:0)
你需要一个foreach循环。
$res = [];
foreach($array as $value){
$res[$value['dateAdded']] = $value['newFile'];
}
答案 4 :(得分:0)
尝试以下代码,这使用foreach循环,因为我认为查询不够,但我可能错了。
$myarray = array();
foreach($yourarray as $key => $value)
{
$myarray[$value['dateAdded']] = $value['newfile'];
}
print_r($myarray); //tocheack
它适用于我。您可以删除$ key并使用值。
这样做是一个空数组,从旧数组中给它一个自定义键,它使用名称,因为它是一个关联数组。然后从那里你可以使用=运算符分配一个值并再次使用关联数组
如果您需要澄清,可以向我提出更多帮助:D
Goodluck meyt