当前位置: 代码迷 >> PHP >> 拼音库创设 php
  详细解决方案

拼音库创设 php

热度:67   发布时间:2016-04-28 17:35:48.0
拼音库创建 php

主要实现从一个数据库中获取中文名称并获取所有可能拼音的的大写字母组合。然后和名称一起导入另外一个数据库

<?php	//通过查找拼音表匹配每个汉子对应首字母	function get_firstchar($keyword)	{	$array = array();	$temp = "";	$array = explode('[',file_get_contents("拼音库文本.txt"));	//echo $array[3];	for($i=0;$i<count($array);$i++){  		if(strstr($array[$i],$keyword) != null)			$temp = $temp . strtoupper(substr($array[$i],0,1));	//打印数组的元素的值  	//echo $array[$i],"<br>";  	}	return $temp;	}		//排列组合函数,实现所有可能大写字母组合,比如中国银行大写拼写可能为“ZGYH”“ZGYX”	error_reporting( E_ALL&~E_NOTICE );	function get_new_arr(){	$args = func_get_args();//取得所有传入参数的数组	$arr = array();	foreach($args as $k=>$v){ 	if($args[$k+1]) {	switch($k) {	case 0:	$arr[$k] = arr_pailie($v,$args[$k+1]);	break;	default:	$arr[$k] = arr_pailie($arr[$k-1],$args[$k+1]);	break;	}	}	}	$key = count($arr)-1;	$res = implode('.',$arr[$key]);	return $res;	}	function arr_pailie ($arr1, $arr2){	$arr = array();	$k = 0;	foreach($arr1 as $k1=>$v1){	foreach($arr2 as $k2=>$v2){	$arr[$k] = $v1.",".$v2;	$k++;	}	}	return $arr;	}	//数据库连接,取出名称和标识	$dbname="DB1";	$servcon=mysql_connect(MySql数据库地址、用户名、账号);	if(!$servcon){ die("Fail to connect to DataBase! Error:".mysql_error());}	mysql_select_db($dbname,$servcon);	$select = mysql_query("select Symbol,Name from smallsnapshoot");		//数据库连接,将股票转换的结果直接输入到数据库stockdb的py_convert表中	$dbname1="DB2";	$servcon1=mysql_connect(<span style="font-family: Arial, Helvetica, sans-serif;">MySql数据库地址、用户名、账号</span>);	if(!$servcon1){ die("Fail to connect to DataBase! Error:".mysql_error());}	mysql_select_db($dbname1,$servcon1);	//循环取源数据库每行名称、标识	while($row = mysql_fetch_array($select)){				//将汉字逐个输入进行查找并保存到$arr_list数组		//$str = "平单银行";		$str = $row["Name"];		$len = mb_strlen($str,"utf-8");		$arr_list = array();		for($i=0;$i<$len;$i++){			$arr[] = mb_substr($str,$i,1,"utf-8");			$arr_list[$i] = get_firstchar($arr[$i]);		}		//echo $arr_list[3];		//循环取每个字符数组字母进行匹配保存到$arr_str中				//排列组合函数调用,先将字符串数组的每个元素转换为对就数组,因为本环境名称最多为三个字或四个字			$arr1 = array();			$arr2 = array();			$arr3 = array();			$arr1 = str_split($arr_list[0]);			$arr2 = str_split($arr_list[1]);			$arr3 = str_split($arr_list[2]);			if(count($arr_list) == 4){				$arr4 = array();				$arr4 = str_split($arr_list[3]);				$result= get_new_arr($arr1,$arr2,$arr3,$arr4);				//echo count($arr_list);			}			else{				$result= get_new_arr($arr1,$arr2,$arr3);				//echo count($arr_list);			}		//echo $result; 				//对组合数据转化为数组并删除重复数组		$arr_str = array();		$arr_str = explode('.',$result);		//echo $arr_str[1];		for($i=0;$i<count($arr_str);$i++){ 			$arr_str[$i] =str_replace(",","",$arr_str[$i]);		}		$membercout = count($arr_str);		$arr_str = array_unique($arr_str);		//print_r($arr_str);		for($i=0;$i<$membercout;$i++){ 			if($arr_str[$i] != null){				//echo $arr_str[$i],"<br />";			//$str_end .= $arr_str[$i];			$py_insert = "INSERT INTO py_convert(py_short_name, py_stock_name, py_stock_symbol) VALUE('$arr_str[$i]', '$row["Name"]', '$row["Symbol"]')";			$result = mysql_query($py_insert) or die("Error in query: $query. ".mysql_error()); 			}		}	//	echo $str_end;	}	mysql_close($servcon);	mysql_close($servcon1);?>建立数据库DB2中拼音表如下:<pre name="code" class="php"><?php$con=mysql_connect(数据库名称、账号、密码);if (!$con)  {  die('Could not connect: ' . mysql_error());  }// Create database/*if (mysql_query("CREATE DATABASE my_db",$con))  {  echo "Database created";  }else  {  echo "Error creating database: " . mysql_error();  }*/// Create table in my_db database$dbname="DB2";mysql_select_db($dbname,$con);$sql = "CREATE TABLE py_convert (  `py_id` int(10) NOT NULL auto_increment,  `py_short_name` varchar(10),  `py_name` varchar(10),  `py_symbol` varchar(16),  PRIMARY KEY  (`py_id`))";mysql_query($sql,$con);mysql_close($con);?>

因为涉及的为汉字名称,所以采用的编辑环境为UTF-8。其中排列组合函数是借鉴的别人的,自己也想了半天效果不好,关键是数据逻辑思维不清楚,可见数据思维的重要性。

自己也是边学边做,php函数的调用不是很熟练,以后要加强编程方面练习。有写得不好的地方,欢迎各位大神指正,互相交流,共同进步!

  相关解决方案