我有一个如下所示的数组:
array
(
[0] => array("date"=>'2016-01-01',"type"=>1),
[1] => array("date"=>'2016-01-13',"type"=>1),
[2] => array("date"=>'2016-01-03',"type"=>1),
[3] => array("date"=>'2016-01-01',"type"=>1)
....
)
我想根据日期按唯一日期和总金额对它们进行排序:
array
(
[0] => array("date"=>'2016-01-01',"type"=>1,"total"=>2),
[1] => array("date"=>'2016-01-03',"type"=>1,"total"=>1),
[2] => array("date"=>'2016-01-13',"type"=>1,"total"=>1)
....
)
数组函数中是否有任何PHP构建可以做到这一点? 或者我应该创建自己的功能?
答案 0 :(得分:1)
不,当然没有单一的功能能够神奇地做到这一点,这可以通过多种功能来解决。
首先,您需要在键入时使用date
对数组进行分组,将其放入新容器中
"date"=>'2016-01-01' // group it by this value
因此,为了做到这一点,您需要使用这些值作为索引来分配新值。
其次,要准备您的数组是可排序的,只需将那些将用于unix时间戳date
的{{1}}密钥转换。因此,以后更容易理清。
总而言之,它看起来像这样:
strtotime
收集数组值后,您希望使用$new_array = array();
foreach($array as $v) {
$date_key = strtotime($v['date']); // turn into unix time
if(!isset($new_array[$date_key])) { // initialization
// turn total to zero first
$new_array[$date_key] = array_merge($v, array('total' => 0));
}
$new_array[$date_key]['total']++; // increment
}
ksort
答案 1 :(得分:0)
按日期字段分组,并使用COUNT作为总行数
$sql = "SELECT *, COUNT(date_field) as total
FROM table
GROUP BY date_field";
$qry = mysqli_query($con, $sql);
if (mysqli_num_rows($qry) > 0)
{
while ($res = mysqli_fetch_object($qry))
{
// Date Array
}
}
答案 2 :(得分:0)
仅供参考:
$arr = [
0 => array("date"=>'2016-01-01',"type"=>1),
1 => array("date"=>'2016-01-13',"type"=>1),
2 => array("date"=>'2016-01-03',"type"=>1),
3 => array("date"=>'2016-01-01',"type"=>1)
];
// count
$date_arr = array_column($arr, 'date');
$times_arr = array_count_values($date_arr);
$date_arr = array_map(function($value){
global $times_arr;
$value['total'] = $times_arr[$value['date']];
return $value;
}, $arr);
// unique
$date_arr = array_map('unserialize', array_unique(array_map('serialize', $date_arr)));
var_dump($date_arr);exit;
答案 3 :(得分:-2)
可能只是
$array[0]["total"] = 2;
$array[1]["total"] = 1;
$array[2]["total"] = 1;
...