一个读取数据并去重的延伸

0

本文作者:peach  发布于:2011-9-17  分类:程序开发  点击:


    这两天在做数据读取写入的时候发现了这样一个很有意思的问题可以和大家分享下:

我将写入的文本存进了一个array数组中 ,此时需要读取写入数据库,这就涉及到了一个去除数组中重复值得问题,然后就发生了下面一连串的php相关函数。
    
一:刚开始想到的是重新定义一个空数组,利用foreach循环,in_array进行判断。如:
//$arr为我重新定义的空数组,$temp_arr为我存数据的数组,
  $arr=array();
 foreach($temp_arr as $key=>$value){
     if(in_array($value,$arr)){
        unset($arr[$key]);
       // print_r($arr);
      // echo "<br>";
  }
  else{
   $arr[]=$value;
  }
 }
print_r($arr);
 
用这样的方法是可以达到效果的,即:可以去掉你读取出来的数据中的重复数据,并且数组的键也是按照正常顺序重新排列了的。可是需要反思的是重复的这样foreach循环会不会问题太多,有没有什么自带的函数呢,想到了array_unique函数
 
//$temp_arr是存放数据的数组
$arr=array_unique($temp_arr);
print_r($arr);
 
直接一个array_unqiue函数就能直接去除数组中的重复值了,但是重复值去是掉了,但是键却不是按顺序排列的了。然后想有什么解决办法呢,想到了array_flip函数,array_flip (交换数组中的键和值)。
//$temp_arr是存放数据的数组
 $arr=array_flip(array_flip($temp_arr));
print_r($arr);
 
数组中值可以是重复的,但是键却是唯一的,所以同时两次使用这个函数就可以起到去重的效果,但是问题又来了,它只能保留重复值中最后一个,也就是键最大的那个,这样的话键还是没按照顺序排列。所以这个也不行。
 
 
最后发现了array_values这个函数,array_values (返回数组中所有的值)
//$temp_arr是存放数据的数组
 $arr=array_values(array_unique($temp_arr));
print_r($arr);
 
 
另外知道了另一个关于数组的函数array_diff,array_diff (计算数组的差集)这个数组暂时还没用到,所以这里也不详细分析了,等遇到了在举实例好了。
 很多人问如何将编程技术练好,从我这次记录怎么项目中遇到的问题想必大家也知道了,从实战中去不断积累经验,遇到问题不要害怕问题,要不断去延伸拓展,然后你就会发现不知不觉我又积累了好几个函数的用法~~!
 
 
 
 
 
本文标签: in_array  array_unique  array_flip  array_values  
本文Url: http://www.h3cisco.cn/post/110.html (出自: 旋风网络家园)
我要引用: 点击这里获取该日志的TrackBack引用地址

相关文章:

0 Comments

Write a comment ?