
PHP根据日期拆分数组
原数组类似为:根据supplierid和date值拆分,先判断supplierid值是否相同,如相同则判断date值是否连续,如连续则放进同一数组(即值相同且值连续则拆分...
原数组类似为:根据supplierid和date值拆分,先判断supplierid值是否相同,如相同则判断date值是否连续,如连续则放进同一数组(即值相同且值连续则拆分进同一数组,否则拆分至新数组)
Array
(
[0] => Array
(
[date] => 2013-08-15
[supplierid] => 208
)
[1] => Array
(
[date] => 2013-08-16
[supplierid] => 1252
)
[2] => Array
(
[date] => 2013-08-17
[supplierid] => 1252
)
[3] => Array
(
[date] => 2013-08-18
[supplierid] => 1252
)
[4] => Array
(
[date] => 2013-08-19
[supplierid] => 208
)
)
拆分后结果类似为
Array
(
[0] => Array
(
[date] => 2013-08-15
[supplierid] => 208
)
)
Array
(
[0] => Array
(
[date] => 2013-08-19
[supplierid] => 208
)
)
Array
(
[0] => Array
(
[date] => 2013-08-16
[supplierid] => 1252
)
[1] => Array
(
[date] => 2013-08-17
[supplierid] => 1252
)
[2] => Array
(
[date] => 2013-08-18
[supplierid] => 1252
)
)
请问如何实现? 展开
Array
(
[0] => Array
(
[date] => 2013-08-15
[supplierid] => 208
)
[1] => Array
(
[date] => 2013-08-16
[supplierid] => 1252
)
[2] => Array
(
[date] => 2013-08-17
[supplierid] => 1252
)
[3] => Array
(
[date] => 2013-08-18
[supplierid] => 1252
)
[4] => Array
(
[date] => 2013-08-19
[supplierid] => 208
)
)
拆分后结果类似为
Array
(
[0] => Array
(
[date] => 2013-08-15
[supplierid] => 208
)
)
Array
(
[0] => Array
(
[date] => 2013-08-19
[supplierid] => 208
)
)
Array
(
[0] => Array
(
[date] => 2013-08-16
[supplierid] => 1252
)
[1] => Array
(
[date] => 2013-08-17
[supplierid] => 1252
)
[2] => Array
(
[date] => 2013-08-18
[supplierid] => 1252
)
)
请问如何实现? 展开
5个回答
展开全部
<?php
$test=array(array("date" => "2013-08-15","supplierid" => 208),
array("date" => "2013-08-17","supplierid" => 1252),
array("date" => "2013-08-16","supplierid" => 1252),
array("date" => "2013-08-18","supplierid" => 1252),
array("date" => "2013-08-19","supplierid" => 208));
$arr=array();
//按 supplierid 进行分组
foreach($test as $data){
$arr[$data["supplierid"]][]=$data["date"];
}
$result=array();
$k=0;
foreach($arr as $key=>$new){
sort($new);//对日期数组进行排序
$i=0;
foreach($new as $child_key=>$data){
//按日期进行分组
if($child_key){
$p=strtotime($new[$child_key])-strtotime($new[$child_key-1]);//连续性判断
if($p!="86400")
$k++;
}
$result[$k][$i]["date"]=$key;
$result[$k][$i]["supplierid"]=$data;
$i++;
}
$k++;
}
print_r($result);
?>
//给你个最精简的
//给你写这段代码花咯10多分钟,一句话都没有?你选择的那段代码是有逻辑错误的,日期差判断有误
展开全部
$new_arr = array();
$k = 0;
foreach($arr as $v){
if(count($new_arr)==0){
$new_arr[$k][]=$v;
}else{
$date = intval(str_replace("-","",$v['date'])); //把时间去掉-并转换为整型
$flag = 0; //表示在该循环中是否有满足项
foreach($new_arr as $key=>$arr){
foreach($arr as $nv){
if($v['supplierid']==$nv['supplierid']){
$ndate = intval(str_replace("-","",$nv['date']));
if(abs($ndate-$date)==1){
$flag = 1;
$new_arr[$key][]=$v;
}
}else{
break; //终止本循环
}
}
}
if($flag==0){ //如果在现有的数组中没有满足项,则新增一项
$k++;
$new_arr[$k][]=$v;
}
}
}
print_r($new_arr);
额,循环的有点多,我测试了一下好像可以做出来。再找找更优化的方法吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-06
展开全部
$array = array(
'0' => array (
'date' => '2013-08-15',
'supplierid' => '208'
),
'1' => array (
'date' => '2013-08-16',
'supplierid' => '1252'
),
'2' => array (
'date' => '2013-08-17',
'supplierid' => '1252'
),
'3' => array(
'date' => '2013-08-18',
'supplierid' => '111'
),
'4' => array(
'date' => '2013-08-19',
'supplierid' => '111'
)
);
function unique_arr($array,$field = 'supplierid'){
$list = $temp = array();
if(!empty($array) && is_array($array)){
foreach ($array as $v){
$v = $v[$field];
$temp[] = $v;
}
$temp = array_unique($temp);
foreach ($temp as $k => $v){
$list[] = $array[$k];
}
}
return $list;
}
echo '<pre>';
print_r(unique_arr($array));
exit;
写完之后我发现我够无聊的....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
function two_array_sort($arr,$feild)//如果原来的日期没按照日期排好重新排序
{
$val=array();
foreach ($arr as $k=>$v)
{
$val[]=$v[$feild];
}
array_multisort($val, SORT_DESC, $arr);
return $arr;
}
$new_arr=array();
foreach ($arr as $k=>$v)
{
$new_arr[$v['supplierid']][]=$v;
};
$get_arr=array();
foreach ($new_arr as $k=>$v)
{
if(count($v)>1)
{
$sort_arr=two_array_sort($v, 'date');
$num= count($sort_arr);
foreach ($sort_arr as $k=>$v)
{
if($k!=$num-1){
$tem=$k+1;
$x=strtotime($v['date'])-strtotime($sort_arr[$tem]['date']);
if($x!=86400)
{
$get_arr[]=$sort_arr[$k];
unset($sort_arr[$k]);
}
}
}
$get_arr[]=$sort_arr;
}else
{
$get_arr[]=$v;
}
}
echo "<pre>";
print_r($get_arr);echo "</pre>";
{
$val=array();
foreach ($arr as $k=>$v)
{
$val[]=$v[$feild];
}
array_multisort($val, SORT_DESC, $arr);
return $arr;
}
$new_arr=array();
foreach ($arr as $k=>$v)
{
$new_arr[$v['supplierid']][]=$v;
};
$get_arr=array();
foreach ($new_arr as $k=>$v)
{
if(count($v)>1)
{
$sort_arr=two_array_sort($v, 'date');
$num= count($sort_arr);
foreach ($sort_arr as $k=>$v)
{
if($k!=$num-1){
$tem=$k+1;
$x=strtotime($v['date'])-strtotime($sort_arr[$tem]['date']);
if($x!=86400)
{
$get_arr[]=$sort_arr[$k];
unset($sort_arr[$k]);
}
}
}
$get_arr[]=$sort_arr;
}else
{
$get_arr[]=$v;
}
}
echo "<pre>";
print_r($get_arr);echo "</pre>";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用数据库的group 功能
自己编程稍有点麻烦
自己编程稍有点麻烦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询