2010-04-16 29 views
0

作爲查詢結果的一部分,返回具有名稱的列。我想應用一個函數,以便在$ db結果中翻轉名字和姓氏的順序。什麼是最有效的方法來完成這一點?如何將字符串函數應用於表列?

有答案可能在於使用foreach函數,array_walk或array_map,但我不知道正確的語法。

這個函數的名稱翻轉:

$name = "Lastname, Firstname"; 
$names = explode(", ", $name); 
$name = $names[1] . " " . $names[0]; 

的$查詢與此類似:

$query0="SELECT #__1pgndata.White, #__1pgndata.Black, #__1pgndata.ECO, #__1pgndata.Result, #__1pgndata.EventDate, #__1pgndata.Id 
    FROM `#__1pgndata` Where #__1pgndata.Id > 155 LIMIT 30" 

白色和黑色是球員的名字列(需要翻轉),並對應於棋子的顏色。有問題的列是$ ginfo-> White和$ ginfo-> Black。

+0

舉一個這樣的字符串的例子將大大幫助您 – 2010-04-16 10:00:07

+0

我編輯我的問題,使其更清晰。 – 2010-04-16 10:19:24

+0

如果你可以在你使用*'$ ginfo'的地方發佈代碼,尤其是已經涉及的任何循環,這將會有所幫助。 – Amber 2010-04-16 10:59:19

回答

1

PHP有一個plenty of string functions。你可以使用任何你想要的

+0

在我編輯的問題中看到字符串操作代碼。我想將它應用於整個列或作爲foreach循環。我無法讓它工作。 – 2010-04-16 10:06:02

+0

@ggg將此代碼放入foreach循環中。 – 2010-04-16 10:14:28

+0

答案可能在於使用foreach函數array_walk或array_map,但我不知道正確的語法。 – 2010-04-16 10:21:54

0

你會提供你的db代碼嗎?

$query0="SELECT #__1pgndata.Black, #__1pgndata.White, #__1pgndata.ECO, #__1pgndata.Result, #__1pgndata.EventDate, #__1pgndata.Id 

FROM #__1pgndata凡#__ 1pgndata.Id> 155 LIMIT 30"

你可以使用這樣也是正確的。

+0

使用添加的代碼查看問題更新。 – 2010-04-16 10:17:24

2

,如果你正在談論他們把數組中的順序,你可以只選擇它們反轉(例如SELECT first_name,last_name,.. FROM users ...),但我建議你使用mysql_fetch_array,這樣你就可以隨心所欲地訪問它們(用$ row ['first_name'], $ row ['last_name']以您想要的順序排列)

+0

第一個和最後一個在同一列。在我編輯的問題中看到字符串操作代碼。 – 2010-04-16 10:04:21

+0

你不能直接將函數應用於數據庫結果集,您需要將數據提取到數組中,並在執行該操作時應用該函數(因此$ row = mysql_fetch_array($ result); flip($ row) ; - 其中flip是你的函數,$ row是通過引用傳遞的),或者在你用array_walk($ rows,'flip')拋出後應用它。 – matei 2010-04-16 10:09:04

+0

如果我的結果查詢被稱爲$ ginfo,並且所討論的列是$ ginfo-> White,array_walk的語法對我有用嗎? – 2010-04-16 10:16:44

0

您可以嘗試使用MySQL String Functions複製功能。最有可能的候選人可能會結合LOCATE()找到', '的位置,然後一對SUBSTR()調用來獲取前後部分,然後使用CONCAT()將它們放回到一起。

+0

我有這個功能,看我的問題。問題出現在語法中,以便函數適用於整個列。 – 2010-04-16 10:14:15

相關問題