拼音庫創建 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函數的調用不是很熟練,以後要加強編程方面練習。有寫得不好的地方,歡迎各位大神指正,互相交流,共同進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章