2015-02-09 52 views
1

我有两个表:usersscripts。用户列user_id和脚本有两个:script_idcron_formtat。当我查询用户:为什么我的sql查询删除关联数组中的列的标题?

$query = "select `user_id` from users"; 
$result = mysql_query($query) or die(mysql_error()); 

while ($row = mysql_fetch_assoc($result)){ 
    array_push($usersArr,$row); 
} 

结果:

[{"user_id":"1"},{"user_id":"2"},{"user_id":"3"},{"user_id":"4"},{"user_id":"5"}] 

我得到关联数组(与列的标题),因为我需要,但为什么我的第二个查询返回的所有值数组但下降的列?:

$query = "select script_id,`cron_format` from scripts"; 
$result = mysql_query($query) or die (mysql_error()); 

while($script = mysql_fetch_assoc($result)){ 
    foreach($usersArr as $user){ 
     $userScriptCronArr[$user["user_id"]][$script["script_id"]] = $script["cron_format"]; 
    } 
} 

结果的标题:

{"1":{"1":"*\/3 * * * *","2":"*\/6 * * * *","3":"*\/3 * * * *","4":"* * * * *"},"2":{"1":"*\/3 * * * *","2":"*\/6 * * * *","3":"*\/3 * * * *","4":"* * * * *"},"3" ... 

第二个结果第一个数字是user_id,并且对于每个用户im分配的每个现有脚本。 为什么我的第二个查询会删除user_id,script_id和cron_format标题?

+0

尝试'foreach($ usersArr作为$ key => $ user){}',然后在你喜欢的地方使用'$ key'。 – 2015-02-09 08:59:00

+0

哪个变量具有您向我们展示的数据?因为如果你向我们展示了'$ userScriptCronArr',那么一切都可以......你有内部搜索数据的键 - 第一个键是用户ID,第二个是scriptID,值是cron_formats .... – Seti 2015-02-09 08:59:21

回答

1

这里没有错。你得到你的联合数组..这是$脚本

while($script = mysql_fetch_assoc($result)){ 
    foreach($usersArr as $user){ 
     $userScriptCronArr[$user["user_id"]][$script["script_id"]] = $script["cron_format"]; 
    } 
    } 

所以你的查询没有错。 $ userScriptCronArr被构造成一个具有两个数字键的多维数组。


关于角部位:

while($script = mysql_fetch_assoc($result)){ 
    foreach($usersArr as $user){ 
     $userScriptCronArr[] = array(
      "user_id" => $user["user_id"], 
      "script_id" => $script["script_id"], 
      "cron_format" => $script["cron_format"] 
     ); 
    } 
} 

这应该得到你的JSON数组你可以用你的角码使用。但请阅读手册!

+0

但是为什么我没有看到数组中每个var之前的列的标题?我用这个标题,以循环投掷阵列' ​​{{x.user_id}} ​​{{x.script_id}} '和这个循环不起作用... – 2015-02-09 09:06:51

+0

因为您只将(!)值添加到您的新阵列。 $ script是关联的,所以你可以使用键“script_id”和“cron_format”来访问它。然后,您指示PHP获取$ script [“cron_format”]的值,并将其放入您的新数组$ userScriptCronArr。所以你把价值拿出来,并把它放到一个新的数组中。你不会对密钥做任何事情,这就是它丢失的原因。我建议阅读有关数组的PHP手册。它非常广泛。 – 2015-02-09 09:09:41

+0

更新了答案。 – 2015-02-09 09:14:19

0

在第一个输出中,您按原样推送整个查询结果。但是,在第二种情况下,您并未推送整个结果,而是在数字数组中启动$ userScriptCronArr。你想要的数据仍然在$脚本中。你只需要正确初始化它,然后就完成了。

+0

我试图使用array_push像这样:array_push($ userScriptCronArr [$ user [“user_id”]] [$ script [“script_id”]],$ script [“cron_format”]);'...但我得到错误说参数1需要是一个数组...你知道我怎么可以使用array_push使userScriptCronArr联想? – 2015-02-09 09:17:54