将Mysql数据传递给PHP数组然后传递给javascript

时间:2014-03-07 11:29:11

标签: javascript php mysql arrays numeric

首先让我解释一下情况:

我有一个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对数据进行排序,因为我希望每个用户的所有圈数排成一行,而且,我不知道用户ID变化(取决于哪个用户发布时间)所以我不能真正做“如果用户ID == 1将此保存在此处然后转到下一个”。

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

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

非常感谢任何帮助,提前谢谢!

1 个答案:

答案 0 :(得分:0)

对于多个用户元素,我将使用多维数组&gt;

$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);

       })

 })

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