将Mysql数据传递到PHP数组,然后传递到javascript

将Mysql数据传递到PHP数组,然后传递到javascript,javascript,php,mysql,arrays,numeric,Javascript,Php,Mysql,Arrays,Numeric,让我首先解释一下情况: 我有一个MySql表,它包含几个列,其中有一个用户id、一个比赛id、一圈时间、一圈数,我想将这些信息放入PHP中的数组中,然后发送到java脚本 我的JavaScript数组最终应该是这样的: 第一行: [laptime1用户1,laptime2用户1,laptime3用户1,…] 第二排: [laptime1用户2,laptime2用户2,laptime3用户2,…] 以下是我目前的情况: 我首先尝试为单个用户测试这种情况,但遇到了很多问题,因为我在MySql中的圈时

让我首先解释一下情况:

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

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

第一行:

[laptime1用户1,laptime2用户1,laptime3用户1,…]

第二排:

[laptime1用户2,laptime2用户2,laptime3用户2,…]

以下是我目前的情况:

我首先尝试为单个用户测试这种情况,但遇到了很多问题,因为我在MySql中的圈时间是浮动的,当使用json_编码时,它将所有内容都转换为字符串,这对我的javascript不起作用,因为它开始输出错误的值。
例如:
第一个值是“8”,而不是“84521”,然后第二个值是“4”,以此类推

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

因此,我找到了以下解决方案,我对其进行了一些修改,它只适用于单个用户(在您看来,它可能看起来很凌乱,我确实是一个初学者,出击超过了我的体重,但它确实有效):

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

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

我的MySQL查询仍然按race lap排序,但我也需要按用户id对数据进行排序,因为我希望每个用户的所有lap都排序在一行中,而且,用户id对我来说是未知的,并且可能会有所不同(取决于哪个用户发布的时间),所以我不能真正执行“如果userid==1,请在此处保存,然后转到下一行”

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

如果您能提供一个比我现在的解决方案更优雅的解决方案来将PHP数组传递给JavaScript,我将非常乐意进行更改,但是使用当前“设置”的简单解决方案也会很好(希望它足够清晰)


任何帮助都将不胜感激,提前谢谢

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

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

       })

 })

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

共享您的$data输出和所需的java脚本数组格式。我上面所需的JavaScript数组格式是可以的,但是我只想让每一行包含另一个用户的圈数(尽管格式相同),这样我就可以使用myArray在脚本中解析它[lap number][user]。我的问题更多的是在php方面,我的$data是一个数组,它只包含与上面的myArray示例相同的时间(但在php中)。如果您获得的是简单的php数组数据,那么您应该使用“$jArray=introde(”,“,”,$data)”。它将用逗号分隔数组数据,如(11221.451212.6621212.66)然后在java脚本中转换它,比如var jsArray=new Array(“”).如果不起作用,请告诉我。但这会考虑到几行吗?如中所示,它会将每行的每个值合并在一起,还是将所有值合并到一行中?是的,因为每个数组数据只存储一列。如果您与print_r共享数组数据会很好。或者您可以使用group_concat和查询语句中的group by子句。例如,“从
speed
group by user\u id ORDER by user\u id LIMIT 0,30中选择user\u id,group\u concat(laptime)作为laptime”以及“检查此id是否存在”对于我的第一个问题,这实际上是一个很好的解决方案,这样我就应该有一个合适的数组,并按照我想要的每个用户和每圈进行排序,感谢我没有想到这一点!Javascript部分我还不完全确定,我将尝试实现您的建议,看看它是如何输出的,然后回来确认。
$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);
$.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);

       })

 })