在PHP中向数组附加其他数据

时间:2014-11-24 21:07:50

标签: php mysql

我使用PHP从MYSQL数据库请求数据。我要求的数据是歌曲信息,例如"艺术家","标题"等...

我想将结果附加到服务器的当前时间。这样做的原因是我可以计算歌曲何时在客户端机器上结束而无需请求两个PHP脚本。

以下是MYSQL数据检索的PHP代码:

<?php

date_default_timezone_set('Europe/London');

header("Cache-Control: no-cache");

// open DB connection
require_once("DbConnect.php");

// fetch playlist
$result = $db->query(
    "SELECT `artist`, `title`, `label`, `albumyear`, `date_played`, `duration`, `picture` "
   ."FROM historylist  ORDER BY `date_played` DESC LIMIT 5 ");

// put into array
while ($row=$result->fetch_object()) $list[] = $row;

// encode and send result
echo json_encode ($list);

?>

目前的请求输出看起来像这样:

注意:这只是一个COLUMN数据,你会看到我实际上要求&#39; DESC LIMIT 5&#39;

* [{&#34; 艺术家&#34;:&#34;正在进行的兄弟&amp; Venditti Bros&#34;,

&#34; 标题&#34;:&#34; Hacienda Real Project(Jorge TakeiRemix)&#34;,

&#34;的标签&#34;:&#34; Dantze&#34;,

&#34;的 albumyear &#34;:&#34; 2013&#34;,

&#34; date_played &#34;:&#34; 2014-11-24 20:45:28&#34;,

&#34;的持续时间&#34;:&#34; 12215&#34;,

&#34; 图片&#34;:&#34; az_B111860__正在进行中的兄弟&amp; Venditti Bros.jpg&#34;}] ***

所以这里的一切都很好,只是标准的数据请求。

我现在要做的是以某种方式将数据添加到服务器的时间(以毫秒为单位)。

是否有可能以某种方式将数组中的第一个结果添加到下面代码的输出中(这是服务器时间,以毫秒为单位)。

<?php
date_default_timezone_set('Europe/London');

$serverTime = round(microtime(true) * 1000);

echo json_encode($serverTime);
?>  

非常感谢您花时间浏览我的问题,希望您能帮我找到我想要的结果......!

2 个答案:

答案 0 :(得分:2)

您问题的简单答案是,您只需修改循环即可。见下文。但正确的答案是Marc B给出的答案。

// put into array
while ($row=$result->fetch_object()) {
    // If this is the first row of the result...
    if (empty($list)) {
        $row['ServerTime'] = round(microtime(true) * 1000);
    }
    $list[] = $row;
}

它将最终出现在JSON的第一个元素中。或者您可以明确地执行此操作(并假设 至少有一个结果...)

$list[0]['ServerTime'] = round(microtime(true) * 1000);

只知道客户端/服务器同步不是那么简单。由于多种原因(JSON传输时间为一),会出现轻微错误。

Marc B答案的粗暴实现是在输出之前立即添加数据

// And one thing I forgot - always best to specify type, and charset.
// Some JS libraries may balk at the output otherwise.
Header('Content-Type: application/json;charset=utf8');

json_encode(array(
    'ServerTime' => round(microtime(true)*1000),
    'list' => $list
));

答案 1 :(得分:1)

不要把时间嵌入json结果中。这是混合不同的数据。它是json,只是围绕它构建一个结构:

$data = array();
$data['dbdata'] = $list;
$data['servertime'] = microtime(true);

echo json_ecode($data);

然后在您的客户端中,您的所有数据库结果都在data.dbdata,而data.servertime是您的时间戳。