PHP实现字符串转换成查询语句

问题:请分析字符串:

“北京_崇文|安徽|山东_济南|” 转化成如下: 

(Province:北京 AND Area:崇文) OR (Province:安徽) OR (Province:山东 AND Area:济南)

 

      可以简单理解为: "_"  代表  AND  "|"  代表 OR。 

在代码实现时  (注意)  

   一、 考虑空值的处理,如:__|北京|_济南||| 

   二、 禁止在代码中使用:Replace 和 Split 方法

下面是我用PHP实现的代码。你也可以用其他语言实现一下,相互交流学习....

1 <?php
2  /**
3 *
4 * 问题:请分析字符串:“北京_崇文|安徽|山东_济南|” 转化成如下:
5 * (Province:北京 AND Area:崇文) OR (Province:安徽) OR (Province:山东 AND Area:济南)
6 * 可以简单理解为: "_" 代表 AND "|" 代表 OR。
7 *
8 * 在代码实现时
9 * 一、 考虑空值的处理,如:__|北京|_济南|||
10 * 二、 禁止在代码中使用:Replace 和 Split 方法
11 *
12 */
13
14 $str = '北京_崇文|安徽|山东_济南|';
15 //$str = '__|北京|_济南|||';
16  
17 $str = iconv("UTF-8","GB2312",$str);
18 $len = strlen($str);
19
20 $array = Array();
21 $content = "(Province:";
22
23 /* 切取字符内容 */
24 for($i=0; $i<$len; $i++) {
25 $temp = substr($str, $i, 1);
26
27 if ( ord($temp) > 0xa0 ) {
28 $tmpstr .= substr($str, $i, 2);
29 $i++;
30 } else {
31 /* 压入数组 */
32 !empty($tmpstr) && array_push($array, $tmpstr);
33 !empty($temp) && array_push($array, $temp);
34
35 $temp = "";
36 $tmpstr = "";
37 }
38 }
39
40
41 /* 生成字符 */
42 foreach($array as $key => $value) {
43
44 /* 字符 */
45 $temp = substr($array[$key - 1], 1);
46
47 /* _ */
48 if (
49 $value == '_'
50 and $array[$key+1] != ""
51 and $array[$key+1] != "_"
52 and $array[$key+1] != "|"
53 and $array[$key-1] != ""
54 and $array[$key-1] != "_"
55 and $array[$key-1] != "|"
56 ) {
57 $content .= " AND Area: ";
58
59 /* | */
60 } elseif (
61 $value == '|'
62 and ord($temp) > 0xa0
63 and $array[$key+1] != ""
64 and $array[$key+1] != "|"
65 ) {
66 $content .= ") OR (Province:";
67
68 /* 文字 */
69 } elseif (
70 $value != '|'
71 and $value != ""
72 and $value != "_"
73 ) {
74 $content .= $value;
75 }
76 }
77 $content .=")";
78
79 echo $content;
80
81 ?>

原创作者:Tiwer

文章出处:http://wgw8299.cnblogs.com/

关于作者:专注于互联网技术研究与开发、企业信息化解决方案。现主要从事PHP, WinForm、ASP.NET、JavaScript、UI、CSS、Linux/Uinx、C++,Google Android等方面的项目开发、架构工作。 

版权说明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2010-11-01 17:03  wgw8299  阅读(995)  评论(0编辑  收藏  举报