首先让我解释一下情况:
我有一个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,我会非常乐意进行更改,但是使用当前“设置”的简单解决方案也会很棒(希望它是一切都清楚了。)
非常感谢任何帮助,提前谢谢!
答案 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);
})
})
这是您需要的还是我完全超出范围?