我希望你能幫助我。解析聖經書籍字符串的PHP問題
我有一個像下面
字符串路1:26-38
而且我希望能夠把它分解成記號或單個變量,這樣我可以在使用變量SQL查詢。
我使用爆炸試過,但我只能夠使它在一個字符爆炸如:或 -
我的字符串有:和 - 也姓名和第一之間的空間數。
我的目標是有:
$name = Luke;
$book = 1;
$from = 26;
$to = 38;
有沒有人能幫助請。
非常感謝
我希望你能幫助我。解析聖經書籍字符串的PHP問題
我有一個像下面
字符串路1:26-38
而且我希望能夠把它分解成記號或單個變量,這樣我可以在使用變量SQL查詢。
我使用爆炸試過,但我只能夠使它在一個字符爆炸如:或 -
我的字符串有:和 - 也姓名和第一之間的空間數。
我的目標是有:
$name = Luke;
$book = 1;
$from = 26;
$to = 38;
有沒有人能幫助請。
非常感謝
list($name, $book, $from, $to) = preg_split('/[ :-]/', 'Luke 1:26-38');
echo $name; //"Luke"
/* Split results in an Array
(
[0] => Luke
[1] => 1
[2] => 26
[3] => 38
)
*/
這工作!太棒了 – user1539953 2012-07-20 07:30:23
$string = "Luke 1:26-38";
preg_match('#^(\w+)\s(\d+):(\d+)-(\d+)$#', $string, $result);
print_r($result);
我會放棄這一點。非常感謝 – user1539953 2012-07-20 07:32:13
你可以做一個簡單的字符串掃描(Demo):
$r = sscanf("Luke 1:26-38", "%s %d:%d-%d", $name, $book, $from, $to);
的varibales則包含的信息。 %s
表示一個字符串(不含空格),%d
表示一個小數。見sscanf
。
爲了使這個 「聖經安全」,它需要一些額外的修改:
$r = sscanf($string, "%[ a-zA-Z] %d:%d-%d", $name, $book, $from, $to);
$name = trim($name);
(Second demo)。
我更喜歡這個,對於我在javascript中所做的事情想得太多了 – Esailija 2012-07-20 07:31:20
太棒了,我會試試這個,謝謝你 – user1539953 2012-07-20 07:31:56
你需要修改這段代碼才能支持編號爲聖經(即提摩太前書,提摩太後書等)。 – worsnupd 2012-07-20 07:36:42
正則表達式很難爲此配置,因爲聖經書名,章節和詩歌的多種配置。由於有些書籍以數字開頭,有些書籍在書名中有多個空格。
我想出了這個構建一個SQL查詢,它爲這些通道搜索類型.. (約翰),(約翰福音3),(約3:16),(帖撒羅尼迦前書1:1)
書名可以是3個字母的縮寫。
是否無限制單個詞搜索和確切短語。
$string = $_GET['sstring'];
$type = $_GET['stype'];
switch ($type){
case "passage":
$book = "";
$chap = "";
$stringarray = explode(':', $string); // Split string at verse refrence/s, if exist.
$vref = $stringarray[1];
$vrefsplit = explode('-', $vref);// Split verse refrence range, if exist.
$minv = $vrefsplit[0];
$maxv = $vrefsplit[1]; // Assign min/max verses.
$bc = explode(" ", $stringarray[0]); // Split book string into array with space as delimiter.
if(is_numeric($bc[count($bc)-1])){ // If last book array element is numeric?
$chap = array_pop($bc); // Remove it from array and assign it to chapter.
$book = implode(" ", $bc); // Put remaining elemts back into string and assign to book.
}else{
$book = implode(" ", $bc); // Else book array is just book, convert back to string.
}
// Build the sql query.
$query_rs1 = "SELECT * FROM kjvbible WHERE bookname LIKE '$book%'";
if($chap != ""){
$query_rs1.= " AND chapternum='$chap'";
}
if($maxv != ""){
$query_rs1.= " AND versenum BETWEEN '$minv' AND '$maxv'";
}else if($minv != ""){
$query_rs1.= " AND versenum='$minv'";
}
break;
case "words":
$stringarray = explode(" ", $string); // Split string into array.<br />
// Build the sql query.
$query_rs1 = "SELECT * FROM kjvbible WHERE versetext REGEXP '[[:<:]]". $stringarray[0] ."[[:>:]]'";
if(count($stringarray)>1){
for($i=1;$i<count($stringarray);$i++){
$query_rs1.= " AND versetext REGEXP '[[:<:]]". $stringarray[$i] ."[[:>:]]'";
}
}
break;
case "xphrase":
// Build the sql query.
$query_rs1 = "SELECT * FROM kjvbible WHERE versetext REGEXP '[[:<:]]". $string ."[[:>:]]'";
break;
default :
break;
}
你是如何使用'explode()'所以它沒有工作? – Teneff 2012-07-20 07:25:42
到目前爲止爆炸(「:」,$ data);其中字符串位於變量$ data – user1539953 2012-07-20 07:26:05
以及列表($ book,$ chapter)= explode(「:」,$ data)中; – user1539953 2012-07-20 07:26:34