php对特定数组进行压缩
特定的数组形式如下:
$dataArr = array(
'0'=>array('c'=>'A','f'=>55,'t'=>60),
'1'=>array('c'=>'A','f'=>61,'t'=>70),
'2'=>array('c'=>'A','f'=>71,'t'=>80),
'3'=>array('c'=>'A','f'=>81,'t'=>90),
'4'=>array('c'=>'B','f'=>91,'t'=>100),
'5'=>array('c'=>'B','f'=>101,'t'=>110),
'6'=>array('c'=>'A','f'=>111,'t'=>120),
'7'=>array('c'=>'B','f'=>121,'t'=>130),
'8'=>array('c'=>'B','f'=>131,'t'=>140),
'9'=>array('c'=>'B','f'=>141,'t'=>150)
);
压缩方法:
function change($dataArr)
{
$j=0;
for ($i=0;$i<=count($dataArr);$i++)
{
if($dataArr[$i]['t']+1 == $dataArr[$i+1]['f'] && $dataArr[$i]['c'] == $dataArr[$i+1]['c'] && $i!=count($dataArr)-1)
{
$dataArr[$i]['t'] = $dataArr[$i+1]['t'];
unset($dataArr[$i+1]);
$j++;
}
}
if($j != 0) $dataArr = change(array_values($dataArr));
return $dataArr;
}
处理代码:
$dataArr = change($dataArr);
var_dump($dataArr);
执行结果:
array
0 =>
array
'c' => string 'A' (length=1)
'f' => int 55
't' => int 90
1 =>
array
'c' => string 'B' (length=1)
'f' => int 91
't' => int 110
2 =>
array
'c' => string 'A' (length=1)
'f' => int 111
't' => int 120
3 =>
array
'c' => string 'B' (length=1)
'f' => int 121
't' => int 150
应用
这段代码印象比较深刻,当时我从那个纯真ip中导出ip数据库,做了n多步处理后只保留了城市,于是就变成了下面这个样子:
仔细看就会发现有好多同城市的ip上一条结束和下一条开始其实是连续的,也就是说完全可以组成一条数据。处理方法上面已给出。成功的从原表285739条数据处理成29251条。处理后的数据如下图:
好吧,就写到这。