Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将具有相同日期的数组替换为具有唯一日期和总计数的数组_Php_Arrays - Fatal编程技术网

PHP将具有相同日期的数组替换为具有唯一日期和总计数的数组

PHP将具有相同日期的数组替换为具有唯一日期和总计数的数组,php,arrays,Php,Arrays,我有一个数组,如下所示: 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),
  [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内置的数组函数可以做到这一点? 或者我应该创建自己的函数?

可能只是

$array[0]["total"] = 2;
$array[1]["total"] = 1;
$array[2]["total"] = 1;
...
可能只是

$array[0]["total"] = 2;
$array[1]["total"] = 1;
$array[2]["total"] = 1;
...

按日期字段分组,并对总行使用计数

$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
}
}

按日期字段分组,并对总行使用计数

$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
}
}

不,当然没有一个函数能神奇地做到这一点,这将由多个函数来解决

首先,您需要在键入时使用
date
对数组进行分组,将其放入一个新容器中

"date"=>'2016-01-01' // group it by this value
因此,为了做到这一点,您需要使用这些值作为索引来分配新值

第二,要使数组可排序,只需将要使用的
date
键转换为unix时间戳
strotime
。这样以后就更容易分类了

所以总的来说,它看起来是这样的:

$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

ksort($new_array); // sort by date
$new_array = array_values($new_array); // remove unix time keys

不,当然没有一个函数可以神奇地实现这一点,这可以通过多个函数来解决

首先,您需要在键入时使用
date
对数组进行分组,将其放入一个新容器中

"date"=>'2016-01-01' // group it by this value
因此,为了做到这一点,您需要使用这些值作为索引来分配新值

第二,要使数组可排序,只需将要使用的
date
键转换为unix时间戳
strotime
。这样以后就更容易分类了

所以总的来说,它看起来是这样的:

$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

ksort($new_array); // sort by date
$new_array = array_values($new_array); // remove unix time keys

仅供参考:

$arr=[
0=>数组(“日期”=>'2016-01-01',“类型”=>1),
1=>数组(“日期”=>'2016-01-13',“类型”=>1),
2=>数组(“日期”=>'2016-01-03',“类型”=>1),
3=>数组(“日期”=>'2016-01-01',“类型”=>1)
];
//计数
$date_arr=数组_列($arr,'date');
$times\u arr=数组\u计数\u值($date\u arr);
$date\u arr=数组\u映射(函数($value){
全球$times_arr;
$value['total']=$times_arr[$value['date']];
返回$value;
},$arr);
//独特的
$date_arr=array_map('unserialize',array_unique(array_map('serialize',$date_arr)));

var_dump($date_arr);退出仅供参考:

$arr=[
0=>数组(“日期”=>'2016-01-01',“类型”=>1),
1=>数组(“日期”=>'2016-01-13',“类型”=>1),
2=>数组(“日期”=>'2016-01-03',“类型”=>1),
3=>数组(“日期”=>'2016-01-01',“类型”=>1)
];
//计数
$date_arr=数组_列($arr,'date');
$times\u arr=数组\u计数\u值($date\u arr);
$date\u arr=数组\u映射(函数($value){
全球$times_arr;
$value['total']=$times_arr[$value['date']];
返回$value;
},$arr);
//独特的
$date_arr=array_map('unserialize',array_unique(array_map('serialize',$date_arr)));


var_dump($date_arr);退出此数组值是否从数据库生成显示sqlquery@Devs我知道我可以使用SELECT DISTINCT(date)作为日期计数(date)作为按日期从表组中的总计。。。但是我不能修改SQL,所以我计划使用PHP数组函数手动执行,您无需修改SQL。使用PHP中的sql查询retrieve@Devs对不起,devs,我指的是查询:(这是从数据库生成的数组值吗?显示sqlquery@Devs我知道我可以使用SELECT DISTINCT(日期)作为日期计数(日期)作为表组中按日期的总计…但我无法修改SQL,因此我计划使用PHP数组函数手动执行此操作。您无需修改SQLretrieve@Devs对不起,devs,我指的是查询:(嗯…你是如何得到这个数组的?嗯…你是如何得到这个数组的?我不能对SQL进行更改…正如我之前提到的,SQL中没有任何修改。这只是一个用于检索数据的查询。那么你将如何检索数据?我不能更改SQL查询的原因是为了保证检索速度的性能,因为表是qu它很大,并且与其他人交叉,我不能使用内部联接,在选择字段时必须小心,以防止浪费额外的资源…我不能更改SQL…正如我前面提到的,SQL中没有任何修改。这只是一个用于检索数据的查询。那么您将如何检索数据?我无法更改SQL的原因是:ry是为了保证检索速度的性能,因为表非常大并且与其他表交叉,我不能使用内部连接,在选择字段时必须小心,以防止额外的资源浪费。。。