文件内容如下:
"蜀ICP备07004826号","Volvo Club 沃尔沃车友会","volvoclub.cn","202.104.186.6",
"晋B2-20040001","中国煤炭资源网","shanxicoal.com.cn","202.104.186.5",
"京ICP备06022664号","博富塔","bofut.biz","202.104.186.4",
"闽ICP备05000184号","瓷都热线","dehuabaici.com","202.104.186.4",
"鲁ICP备06037787号","恒华化工厂","henghua.cn","202.104.186.5",
"粤ICP备05023483号","荔兴化工有限公司","gzlixing.com","202.104.186.4",
"粤ICP备06049847号","汕头市易兴商务有限公司","czyihua.cn","202.104.186.5",
"苏ICP备07023508号","中华脑萎缩网","zhnws.com","119.146.223.172",
"鄂ICP备07009261号","湖北省南方汽车职业学校网站","nanfangqc.com","58.252.3.146",
"鲁ICP备07001351号","青春特区","esunboy.cn","202.104.186.6",
"京ICP备06008853号","北京博安天慧科技有限公司","tketang.net","202.104.186.5",
"京ICP备06008853号","北京博安天慧科技有限公司","tketang.com","203.169.164.18",
"京ICP备06008853号","北京博安天慧科技有限公司","tketang.com.cn","202.104.186.5",
"晋ICP备06006096号","天南地北晋城人","jcren.com.cn","58.252.3.146",
"苏ICP备07023848号","江苏溧阳恒昌贸易有限公司","lyhcmy.com","202.104.186.4",
"闽ICP备05005551号","顶尖电子","teckor.com","202.104.186.5",
"晋ICP备07003402号","中国说法网","shuofa30.com","202.104.186.4",
"沪ICP备07020340号","上海莱茵小镇","ppstar.cn","119.146.223.176",
"琼ICP备07001874号","海南百健生物开发有限公司","chinajk.cc","119.146.223.133",
......后面还有好多相同的内容用php实现让相同的省份简写放在一起:如第五行应该和第十行在一起
我的思路是读取每一行的内容把省份部分提取出来转换成拼音再比较,然后按照拼音的升序排列(文件中如何排序?),
我想请教下高手如何读取每一行的省份部分并把它们转换成拼音来比较最终实现结果,不知道我的思路对不对
请教下高手其它思路,谢谢,不胜感激
"蜀ICP备07004826号","Volvo Club 沃尔沃车友会","volvoclub.cn","202.104.186.6",
"晋B2-20040001","中国煤炭资源网","shanxicoal.com.cn","202.104.186.5",
"京ICP备06022664号","博富塔","bofut.biz","202.104.186.4",
"闽ICP备05000184号","瓷都热线","dehuabaici.com","202.104.186.4",
"鲁ICP备06037787号","恒华化工厂","henghua.cn","202.104.186.5",
"粤ICP备05023483号","荔兴化工有限公司","gzlixing.com","202.104.186.4",
"粤ICP备06049847号","汕头市易兴商务有限公司","czyihua.cn","202.104.186.5",
"苏ICP备07023508号","中华脑萎缩网","zhnws.com","119.146.223.172",
"鄂ICP备07009261号","湖北省南方汽车职业学校网站","nanfangqc.com","58.252.3.146",
"鲁ICP备07001351号","青春特区","esunboy.cn","202.104.186.6",
"京ICP备06008853号","北京博安天慧科技有限公司","tketang.net","202.104.186.5",
"京ICP备06008853号","北京博安天慧科技有限公司","tketang.com","203.169.164.18",
"京ICP备06008853号","北京博安天慧科技有限公司","tketang.com.cn","202.104.186.5",
"晋ICP备06006096号","天南地北晋城人","jcren.com.cn","58.252.3.146",
"苏ICP备07023848号","江苏溧阳恒昌贸易有限公司","lyhcmy.com","202.104.186.4",
"闽ICP备05005551号","顶尖电子","teckor.com","202.104.186.5",
"晋ICP备07003402号","中国说法网","shuofa30.com","202.104.186.4",
"沪ICP备07020340号","上海莱茵小镇","ppstar.cn","119.146.223.176",
"琼ICP备07001874号","海南百健生物开发有限公司","chinajk.cc","119.146.223.133",
......后面还有好多相同的内容用php实现让相同的省份简写放在一起:如第五行应该和第十行在一起
我的思路是读取每一行的内容把省份部分提取出来转换成拼音再比较,然后按照拼音的升序排列(文件中如何排序?),
我想请教下高手如何读取每一行的省份部分并把它们转换成拼音来比较最终实现结果,不知道我的思路对不对
请教下高手其它思路,谢谢,不胜感激
比如返回元素 苏 23 就是说苏在原文件排23 现在应该去23条找苏,然后放到苏元素下标+1的位置
$a[$key][] = $str;
思路:取出ICP字符前的字符(引号去掉)MD5做键值。赋值新数组
$blocks = file("../test_file/test.txt");
$nums = count($blocks);
$province = array(
京,
津,
沪,
渝,
冀,
豫,
云,
辽,
黑,
湘,
皖,
鲁,
新,
苏,
浙,
赣,
鄂,
桂,
甘,
晋,
蒙,
陕,
吉,
闽,
贵,
粤,
青,
藏,
川,
宁,
琼
);
$temp_array = array();
//foreach($blocks as $key => $value) {
// echo $key."-".$value."<br/>";
//}
for($i=0;$i<$nums;$i++){
for($j=0;$j<sizeof($province);$j++) {
$str = substr($blocks[$i],1,strpos($blocks[$i], 'ICP')-1);//取出第一个字
if($province[$j]==$str) {
for($k=0;$k<$nums;$k++) {
$temp_array[$k] = array($j=>$blocks[$i]);
//echo $j."-".$blocks[$i]."<br/>";
}
}
}
}
?>
取出第一字已经实现了,我现在的问题是如何根据这个取出的字来让他们相同的放在一起,
我觉得肯定要用到关联数组,五楼的朋友请问下如何把取出来的第一个字的那列作为键建立一个数组?谢谢
不过给你个建议,可能会更好些.将以上的信息保存成二维数组,可以将每个属性当成一维,为了排序也可以新增一个属性,作为排序.
然后按照 array_mutisort进行排序,这个函数的好处就是可以对多维进行排序.http://blog.sevenight.com/index.php?m=blog&a=show&id=104
如果两个数组元素个数相同,可以利用array_map来实现.
自定义一个函数,将一个数组的值当做另一个数组的索引.
详细参看手册.
我的源码:
<?php
$blocks = file("../test_file/test.txt");
$nums = count($blocks);
$province = array(
京,
津,
沪,
渝,
冀,
豫,
云,
辽,
黑,
湘,
皖,
鲁,
新,
苏,
浙,
赣,
鄂,
桂,
陇,
晋,
蒙,
陕,
吉,
闽,
贵,
粤,
青,
藏,
川,
宁,
琼,
蜀,
滇
);
$temp_array = array();
for($i=0;$i<$nums;$i++){
//取出每行的第一个字即省份的简写
$str = substr($blocks[$i],1,strpos($blocks[$i], 'ICP')-1);
for($j=0;$j<sizeof($province);$j++) {
if($province[$j]==$str) {
$count++;
$temp_array[$i] = $j;
}
}
}
?>
$temp_array[$i]是我提出的每行的省份简称在$province这个数组出现的位置组成的一个数组,我的目的就是希望把这个数组和$blocks数组合并成一个新的数组,然后又这个$temp_array[]数组作为键,$blocks作为值,我只要对键进行排序就可以使相同的省份的记录在一起了
源码如下:
方法一:<?php
$blocks = file("../test_file/test.txt");
$temp_array = array();
foreach($blocks as $key =>$value){
if(strpos($blocks[$key],'ICP')){
//取出每行的省份简称
$str = substr($blocks[$key],1,strpos($blocks[$key], 'ICP')-1);
}else {
$str = substr($blocks[$key],1,strpos($blocks[$key], 'B2')-1);
}
//为每个键取不同的键名
$temp_array[$str+$key] = $value;
unset($blocks[$key]);
}
array_multisort($temp_array,SORT_ASC,SORT_STRING);
foreach($temp_array as $key =>$value){
echo $key."-".$value."<br>";
}
$filename = "../test_file/test1.txt";
$file = fopen($filename, "w");
foreach($temp_array as $key =>$value){
$len=fwrite($file,$value);
}
fclose($file);
?>
方法二:<?php
$blocks = file("../test_file/test.txt");
$temp_array = array();
foreach($blocks as $key =>$value){
if(strpos($blocks[$key],'ICP')){
//取出每行的省份简称
$str = substr($blocks[$key],1,strpos($blocks[$key], 'ICP')-1);
}else {
$str = substr($blocks[$key],1,strpos($blocks[$key], 'B2')-1);
}
//把值当键,键当值
$temp_array[$value] = $str;
unset($blocks[$key]);
}
ksort($temp_array);
foreach($temp_array as $key =>$value){
echo $value."-".$key."<br>";
}
$filename = "../test_file/test2.txt";
$file = fopen($filename, "w");
foreach($temp_array as $key =>$value){
$len=fwrite($file,$key);
}
fclose($file);
?>
东西做得少,函数不熟啊