【问题标题】:Passing Mysql data to PHP array then to javascript将 Mysql 数据传递给 PHP 数组,然后传递给 javascript
【发布时间】:2014-03-07 11:29:11
【问题描述】:

让我先解释一下情况:

我有一个 MySql 表,其中包含几列,其中一个用户 ID、一个比赛 ID、一个单圈时间、一个单圈数,我想将此信息放入 PHP 中的一个数组中,然后将其发送到 java脚本。

我的 JavaScript 数组最终应该是这样的:

第一行:

[laptime1 user1, laptime2 user1, laptime3 user1,...]

第二行:

[laptime1 user2, laptime2 user2, laptime3 user2,...]

这是我目前的情况:

我首先尝试为单个用户测试这种情况并遇到了很多问题,因为我在 MySql 中的单圈时间是浮动的,当使用 json_encode 时,它​​会将所有内容都转换为字符串,这对我的 javascript 不起作用,因为它开始输出错误的价值观。
例如:
第一个值是“8”而不是“84,521”,然后第二个值是“4”,等等......)......

遗憾的是,我找到了一个带有数字检查选项的潜在解决方案,但无法使用它,因为我的主机运行的 PHP 版本不支持它。

所以我找到了以下解决方案,我稍微摆弄了一下,它适用于单个用户(对你来说它可能看起来很乱,我真的是一个初学者并且超出了我的体重,但它有效):

$query = doquery("SELECT racelaptime,userid FROM {{table}} WHERE raceid='1' ORDER BY racelap", "liverace");
while(($result = mysql_fetch_array($query))) {
    $data[] = (float)$result['racelaptime'];
}

$script = $script . "\nvar myArray = new Array(";
foreach ($data as $key => $value){
    if ($key < (count($data)-1)){
        $script = $script . $value . ',';
    }
    else {
        $script = $script . $value . ");\n";
    }
}

这会在 JavaScript 中输出一个如下所示的数组:

myArray=[84.521,83.800,81.900]

这很好,因为这正是我的 java 脚本作为输入所需要的(时间以秒为单位,每圈用逗号分隔)。

现在我想实现多用户元素,但我不知道如何解决这个问题......

我的 MySQL 查询仍然按比赛圈数排序,但我还需要按用户 ID 对数据进行排序,因为我希望每个用户的所有圈数都排在 1 行中,另外,用户 ID 对我来说是未知的,可以变化(取决于哪个用户发布时间),所以我不能真正做一个“如果 userid==1 保存这里然后转到下一个”。

我是否应该在存储数据的 while 循环中使用 foreach 语句,但我如何告诉他将同一用户的所有圈数存储在第一行(以及第二行的下一个用户,等等。 .) 不使用大量 SQL 查询?

如果您可以提供比我当前的解决方案更优雅的解决方案来将 PHP 数组传递给 JavaScript,我会非常乐意进行更改,但使用当前“设置”的简单解决方案也会很棒(希望它是都很清楚)。

任何帮助将不胜感激,在此先感谢!

【问题讨论】:

  • 分享您的 $data 输出并希望 java 脚本数组格式..
  • 我上面想要的 JavaScript 数组格式是可以的,但是我只是想让每一行包含另一个用户的单圈时间(虽然格式相同),这样我就可以在我的脚本中使用 myArray 解析它[圈数] [用户]。我的问题更多在 php 方面,我的 $data 是一个数组,它只包含与上面的 myArray 示例相同的时间(但在 php 中)。
  • 如果你得到简单的 php 数组数据,那么你应该使用 '$jArray = implode (',', $data)'。它会将您的数组数据用逗号分隔,例如 (11221.45, 1212.66, 21212.66),然后您将其转换为 java 脚本,例如
  • 那会考虑几行吗?如,它将每行的每个值连接在一起,用逗号分隔还是将它们全部网格化在一行中?
  • 是的,因为您只存储每个数组数据中的一列。如果您与 print_r 共享您的数组数据,那就太好了。或者您可以在查询语句中使用 group_concat 和 group by 子句。比如,“SELECT user_id, group_concat( laptime ) AS laptime FROM speed GROUP BY user_id ORDER BY user_id LIMIT 0 , 30”

标签: javascript php mysql arrays numeric


【解决方案1】:

对于多个用户元素,我会使用多维数组 >

$query = doquery("SELECT racelaptime,userid FROM {{table}} WHERE raceid='1' ORDER BY racelap", "liverace");

// Loop the DB result
while(($result = mysql_fetch_array($query))) {

    // Check if this ID is already in the data array
    if(!array_key_exists($result['userid'], $data)){

        // Create array for current user
        $data[$result['userid']] = array();

    }

    // Add the current race time to the array (do not need to use the float)
    $data[$result['userid']][] = $result['racelaptime'];

}

// Echo json data
echo json_encode($data);

现在在处理这个数组时,你需要在 Javascript 端做的是遍历每个用户

$.each(data, function(key, value){

       // Use parseFloat to keep the decimal value
       alert(key + ' Has the following values - ' + value);

       // If you want to display the racing values you simply
       $.each(value, function(k, parseFloat(v)){

             alert(v);

       })

 })

这是你需要的还是我完全超出了范围?

【讨论】:

  • “检查此 ID 是否存在”实际上是解决我的第一个问题的好方法,这样我应该有一个适当的数组,并按照我的需要按用户和每圈排序,谢谢我没有没想到! Javascript 部分我还不完全确定,我会尝试实施您的建议,看看它是如何输出的,然后回来确认。
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 2017-05-05
  • 2011-05-16
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
相关资源
最近更新 更多