【问题标题】:Modify every value of specified key in array修改数组中指定键的每个值
【发布时间】:2014-10-10 13:55:15
【问题描述】:

我有一个包含多行和多列的数据库,它们是用 PDO 抓取的。

$sql     = "SELECT timestamp FROM table";
$stmt    = $dbh->prepare($sql);
$results = $stmt->execute;
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

其中一个数据库列是timestamp,它是一个 10 位的 unix 时间戳。我想将此服务器端转换为可读格式,然后再发送到浏览器。

这就是我希望它被格式化的方式,但我知道它需要在每一行都完成,这就是它让我绊倒的地方。可能是一个 foreach 循环?

$results['timestamp'] = date('H:i\, l jS \of F Y', $results['timestamp']);

【问题讨论】:

  • 听起来很有可能。你试过了吗?
  • @JayBlanchard 是的。如果我的查询返回单行,它可能会起作用,但由于它是多行,我需要遍历每一行。

标签: php mysql arrays pdo


【解决方案1】:

直接在 DB 中执行此操作要简单得多,因为 DB 已经在完全相同的数据上“循环”,您不必在客户端代码中重新循环:

SELECT DATE_FORMAT(timestamp, '%H:%i, etc...') FROM table

格式代码记录在这里:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

【讨论】:

  • 您需要timestamp 的反引号吗? dev.mysql.com/doc/refman/5.5/en/datetime.html
  • 好的。我认为您需要转义保留字。
  • 你需要,除非他们被允许:MySQL permits some keywords to be used as unquoted identifiers because many people previously used them. Examples are those in the following list: ACTION BIT DATE ENUM NO TEXT TIME TIMESTAMP
  • 这是一个建议,但我可能需要修改其他列。这种方法很简洁,但仅适用于上述关键字,例如 DATE_FORMAT。一个 foreach 循环将让我修改这个时间戳示例,以及在提交给用户之前需要附加/修改的任何其他变量。
【解决方案2】:

想通了:)

array_walk($results, function(&$value) {
    $value['timestamp'] = date('H:i\, l jS \of F Y', $value['timestamp']);
}

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2017-06-03
    • 1970-01-01
    相关资源
    最近更新 更多