标签 压缩数组 下的文章

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条。处理后的数据如下图:

处理后

好吧,就写到这。