我想用PDO对象中的一些数据创建Javascript数组。这是我的代码:
$req = $bdd->query('SELECT
id AS user_id,
fname AS user_fname,
lname AS user_lname
FROM mand_users');
$autocomplete_users = '<script type="text/javascript"> var names_users = new Array(';
$users_ids = 'var users_ids = new Array(';
$i = -1;
while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) {
print_r($donnees);
$i++;
$user_full_name = $donnees['user_fname'].' '.$donnees['user_lname'];
$user_id = $donnees['user_id'];
if ( $i < count($donnees)-1) {
$autocomplete_users .= $user_full_name.', ';
$users_ids .= $user_id.', ';
} else {
$autocomplete_users .= $user_full_name.');';
$users_ids .= $user_id.');';
}
}
echo $autocomplete_users . $users_ids .'</script>';
print_r
返回
Array
(
[user_id] => 1
[user_fname] => Bob
[user_lname] => Smith
)
Array
(
[user_id] => 2
[user_fname] => Alice
[user_lname] => Smith
)
所以对象的长度为2.在这种情况下,JS代码看起来像这样
<script type="text/javascript">
var names_users = new Array(Bob Smith, Alice Smith);
var users_ids = new Array(1, 2);
</script>
但我得到了这个
<script type="text/javascript">
var names_users = new Array(Bob Smith, Alice Smith, var users_ids = new Array(1, 2, </script>
表示else
中的代码未执行。所以我用count()
检查了对象的长度,然后返回3.你怎么解释这个?
答案 0 :(得分:1)
我建议你不要写代码,因为它太容易出错。 您可以在2个数组中插入数据,然后可以使用类似http://ca.php.net/implode的内容来添加逗号..
$user_ids = array();
$user_names = array();
while ($donnees = $req->fetch(PDO::FETCH_ASSOC)) {
$name = $donnees['user_fname'].' '.$donnees['user_lname'];
$id = $donnees['user_id'];
$user_ids[] = $id;
$user_names[] = $name;
}
<script>
var names = new Array('<?php implode("', '", $user_names); ?>');
var ids = new Array(<?php implode(", ", $user_ids); ?>);
</script>
(code not tested, just to give you a hint)
但说实话,你不应该这样做,你应该尝试检查JSON: http://ca.php.net/json_encode http://ca.php.net/json_decode
这是将对象传递给JavaScript的最简单方法。
答案 1 :(得分:1)
你最好为你想要创建的每个列表创建一个数组,填充它而不用担心哪个是最后一个条目,然后在while循环之后执行此操作:
$autocomplete_users = '<script type="text/javascript"> var names_users = new Array(';
$autocomplete_users .= implode(', ', $autocomplete_users_array);
$autocomplete_users .= ');';
...或者甚至可以更好地用PHP构建数组,然后使用json_encode()。