gpt4 book ai didi

php - 从一组字符串中获取可用数组的复杂方法

转载 作者:行者123 更新时间:2023-11-29 00:24:23 25 4
gpt4 key购买 nike

我会尽量以最好的方式解释这一点。

我的数据库中存储了一组日志。我需要处理那些存储不太好的日志(以一种非常低效的方式)。

我先给你看看表格:

Table

因此,value 列中的这些句子需要分解成可用的部分,以便我可以分别向我的用户列出适当的信息。

我需要从该专栏收集的信息:

  • 操作类型(禁止、警告、踢出、监禁和罚款)
  • 发出 Action 的人(即 Scotty)
  • 如果行为是罚款,罚款金额
  • 行动的原因

有了这些收集到的信息,我需要将其单独显示在表格中给用户。禁令应列在一个单独的表格中,单独警告等等。

每种情况下表格的外观:

<h2>Bans</h2>
<table>
<tr>
<th>Issued by</th>
<th>Time</th>
<th>Reason</th>
</tr>

<tr>
<td>THE NAME OF THE ISSUER</td>
<td>DATE AND TIME</td>
<td>THE REASON</td>
</tr>
</table>

<h2>Fines</h2>
<table>
<tr>
<th>Issued by</th>
<th>Time</th>
<th>Reason</th>
<th>Amount</th>
</tr>

<tr>
<td>THE NAME OF THE ISSUER</td>
<td>DATE AND TIME</td>
<td>THE REASON</td>
<td>THE AMOUNT</td>
</tr>
</table>

Bans、warns 和 jails 应该有相同的表结构,只有 Amount 列的罚款略有不同。

我是如何收集信息的

好吧,我用这种方法以一种简单的方式从数据库中获取信息:

public function obtain_player_adminlog($player_id)
{
global $samp_db;

$player_name = $this->get_pname_by_id($player_id);

$sql = "SELECT * FROM adminlog
WHERE value LIKE '%" . $player_name . "%'";
$result = $samp_db->sql_query($sql);

return $samp_db->sql_fetchrowset($result);
}

我知道这个函数不是万无一失的函数,但这是我能得到的最好的。查询中使用的方法来自phpBB DBAL,与问题无关。

包含此数据的返回数组如下所示:

Array
(
[0] => Array
(
[entryID] => 5
[value] => AdmWarn: {FFFFFF}Scott_Parker has unbanned player Dave_Meniketti.
[entryTime] => 2013-10-24 00:49:56
[tickcount] => 4577394
)

[1] => Array
(
[entryID] => 11
[value] => Fine: Scott_Parker has been fined $25039 by Scotty, reason: test test
[entryTime] => 2013-10-24 00:52:02
[tickcount] => 4703416
)

[2] => Array
(
[entryID] => 12
[value] => Ban: Scott_Parker has been banned, reason: Third warning (last from Scott_Parker)
[entryTime] => 2013-10-24 00:52:11
[tickcount] => 4712439
)

)

总结一下

  1. 我需要一种万无一失的方法来从数据库中获取信息因为它很容易被 MySQL LIKE 子句所愚弄例如重复两次(即 Array[2])。
  2. 我需要一个方法根据 Action 拆分信息并将其列在不同的表格。

对我来说,这看起来是一项非常复杂的任务,我想不出解决这个问题的方法。几天来我一直在思考如何实现这一目标 - 运气不佳。

如有任何帮助,我们将不胜感激。

最佳答案

根据您的说法,我只会使用正则表达式!我将引导您完成各个部分,但您真的应该考虑一下 learning more about them in general .

  1. 首先,我们应该使用 (.+?): 按第一个词拆分列表. preg_match("/^(.+?):/", $input_line, $output_array)将为您提供一个数组,其中第二个值是您的第一个单词。
  2. 然后你把它扔进switch基于第一个词的语句,将其引导到进一步处理。
  3. 然后根据表达式制作正则表达式。如果没问题(我选择这个是因为它看起来最复杂),你会做类似的事情:preg_match("/^.+?: (.+?) has been fined (\$\d+) by (.+?), reason: (.+)$/", $input_line, $output_array) .这将为您提供一个如下所示的数组:[0] => Fine: Scott_Parker has been fined $25039 by Scotty, reason: test test, [1] => Scott_Parker, [2] => $25039, [3] => Scotty, [4] => test test (出于某种原因,SO 不喜欢将此作为普通代码)。
  4. 您可以使用 array_push 按类型将数组转储到父数组中,然后你只需使用 foreach 遍历它们生成您的页面!
  5. 您实际上可以处理在那个开关中生成 html。既然你知道即将出现的阵列,那就让你的模板发生吧。因此,对于 #3 中的示例(以及您的评论),您可以执行类似 $fineHTML = <tr><td><?=fineArray[3]?></td><td><?=fineArray[5]?></td><td><?=fineArray[4]?></td><td><?=fineArray[2]?></td></tr> 的操作。 .然后你只需按 $fineHTML到一个数组,你用 foreach 循环它显示在页面上。

还有关于您的 MySQL 问题,you can use regular expressions there ,也是。

关于php - 从一组字符串中获取可用数组的复杂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com