【问题标题】:How do I apply a string function to a table column?如何将字符串函数应用于表列?
【发布时间】:2010-04-16 09:56:12
【问题描述】:

作为查询结果的一部分,将返回带有名称的列。我想应用一个函数,以便在我的 $db 结果中翻转名字和姓氏的顺序。实现此目的最有效的方法是什么?

答案可能在于使用 foreach 函数、array_walk 或 array_map,但我不知道正确的语法。

这个函数做名字翻转:

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

$query 类似这样:

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

White 和 Black 是玩家姓名的列(需要翻转),对应棋子的颜色。有问题的列是 $ginfo->White 和 $ginfo->Black。

【问题讨论】:

  • 举一个这样的字符串的例子会对你有很大帮助
  • 我编辑了我的问题以使其更清晰。
  • 如果您可以将代码发布到您实际使用 $ginfo 的位置,这将有所帮助,尤其是已经涉及的任何循环。

标签: php arrays string mysql


【解决方案1】:

如果你在谈论它们在数组中的顺序,你可以选择它们相反(例如 SELECT first_name, last_name, .. FROM users...),但我建议你使用 mysql_fetch_array,这样你会能够随心所欲地访问它们(使用 $row['first_name'], $row['last_name'] 以任何你想要的顺序)

【讨论】:

  • 第一个和最后一个在同一列中。请参阅我编辑的问题中的字符串操作代码。
  • 您不能直接在数据库结果集上应用该函数,您需要将结果提取到一个数组中,并在执行此操作时应用该函数(所以 $row = mysql_fetch_array($result ); flip($row); - 其中 flip 是您的函数, $row 通过引用传递)或在您使用 array_walk($rows, 'flip') 获取它后应用它
  • 如果我的结果查询被称为 $ginfo 并且有问题的列是 $ginfo->White,对我有用的 array_walk 的语法是什么?
  • 这取决于您所说的 $ginfo 以及您如何在 PHP 中存储数据库信息。我之前告诉过您一个案例,您将所有行存储在一个数组中,并且每一行都是一个数组。但我可以看到你正在使用对象,所以我不能告诉你的情况。如果您想要一个 sql 解决方案(可能这是最好的方法): SELECT SUBSTRING(name,1, LOCATE(",",name)-1 ) AS firstname, SUBSTRING(name, LOCATE(",",name )+1, LENGTH(name)-LOCATE(",",name)) AS lastname FROM table 应该可以解决问题
  • $ginfo是mysql数据库查询结果。
【解决方案2】:

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

【讨论】:

  • 查看我编辑的问题中的字符串操作代码。我想将它应用于整个列或作为 foreach 循环。我无法让它工作。
  • 答案可能在于使用 foreach 函数,array_walk 或 array_map,但我不知道正确的语法。
  • @ggg 好吧,我敢打赌,您会以某种方式使用此查询结果。我想使用while 循环。所以,把这段代码放在while循环中。您已经知道解决方案的所有细节。试着把它放在一起。试着思考!
【解决方案3】:

您可以尝试使用MySQL String Functions 复制该功能。最有可能的候选人可能会组合使用LOCATE() 来查找', ' 的位置,然后使用一对SUBSTR() 调用来获取之前和之后的部分,然后使用CONCAT() 将它们重新组合在一起。

【讨论】:

  • 我有这个功能,看我的问题。问题出在语法上,以便该函数适用于整个列。
【解决方案4】:

你能提供你的数据库代码吗?

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

FROM #__1pgndata 其中#__1pgndata.Id > 155 LIMIT 30"

你也可以这样使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2020-11-23
    相关资源
    最近更新 更多