我有一个php页面,它返回一个php数组,如下所示
array(6) {
[0]=>
array(2) {
["cityName"]=>
string(10) "Ananindeua"
[0]=>
string(10) "Ananindeua"
}
[1]=>
array(2) {
["cityName"]=>
string(8) "An�polis"
[0]=>
string(8) "An�polis"
}
[2]=>
array(2) {
["cityName"]=>
string(8) "Anderson"
[0]=>
string(8) "Anderson"
}
[3]=>
array(2) {
["cityName"]=>
string(6) "Angers"
[0]=>
string(6) "Angers"
}
[4]=>
array(2) {
["cityName"]=>
string(9) "Angoul�me"
[0]=>
string(9) "Angoul�me"
}
[5]=>
array(2) {
["cityName"]=>
string(6) "Anshan"
[0]=>
string(6) "Anshan"
}
}
我想在另一个页面中使用这个数组来做一些ajax,我想将resulat编码为JSON,如下所示:
{
"cityName": "Anshan",
"cityName": "Angoul�me",
"cityName": "Anderson",
"cityName": "An�polis",
"cityName": "Ananindeua"
}
但相反,我只得到一个值,这是最后一个值:
{
"cityName": "Anshan"
}
这是我尝试过的代码:
<?php
$connexion = new PDO("mysql:host=localhost;dbname=world", 'root', 'toor');
$statement = $connexion->prepare("SELECT cityName FROM cities WHERE cityName LIKE '" . $_POST['cityName'] . "%'");
$statement->execute();
$resultats = $statement->fetchAll();
foreach($resultats as $city) {
$output[key($city)] = current($city);
}
echo json_encode($output, 128);
?>
那么我该如何解决这个问题呢?
我试图只获取城市名称,并将它们推入数组,当我为此数组执行var_dump()
时,这就是我得到的:
array(6) {
[0]=>
string(10) "Ananindeua"
[1]=>
string(8) "An�polis"
[2]=>
string(8) "Anderson"
[3]=>
string(6) "Angers"
[4]=>
string(9) "Angoul�me"
[5]=>
string(6) "Anshan"
}
但是当我做了json_encode()
我没有得到任何东西时,所以我试着做var_dump(json_encode($output));
而我得到了这个:
bool(false)
我第二次尝试手动创建表格:
$a = array("Ananindeua","Anápolis","Anderson","Angers","Angoulême","Anshan" );
并且有效。
但是为什么第一个数组不会编码!
答案 0 :(得分:0)
您的array
密钥相同(cityName
),因此每次分配时都会替换该值。
使用数字数组或区分键
的其他方法如,
foreach($resultats as $city) {
$output['cityName'][] = current($city);
}
输出
{"cityName":
[
"Anshan",
"Angoulme",
"Anpolis"
]
}
答案 1 :(得分:0)
您想要的输出无效/可想象为PHP关联数组或JSON,因为在这两种情况下,您都有重复的键。
您只是在每次迭代时覆盖cityName
键。推送到数组:
foreach($resultats as $city) {
$output[] = current($city);
}
echo json_encode($output, 128);
输出:
[
"Anshan",
"Angoulme",
"Anpolis"
]
或者如果您想要每个城市的对象,如果您想要其他属性,这将非常有用:
foreach($resultats as $city) {
$output[] = array(
'cityName' => current($city)
);
}
echo json_encode($output, 128);
输出:
[
{
"cityName" : "Anshan",
},
{
"cityName" : "Angoulme",
},
{
"cityName" : "Anpolis"
}
]
附注:如果您不需要PDO fetch调用中的数字键,请考虑使用PDO::FETCH_ASSOC
获取样式,仅返回关联键:
$resultats = $statement->fetchAll(PDO::FETCH_ASSOC);
答案 2 :(得分:0)
你期待的json看起来不对劲。它应该是:
[
{"cityName": "Anshan"},
{"cityName": "Angoul�me"},
{"cityName": "Anderson"},
{"cityName": "An�polis"},
{"cityName": "Ananindeua"}
]
要生成这个,你需要这样的代码:
foreach($resultats as $city) {
$item = new stdClass();
$item.cityName = current($city);
$output[] = item;
}
答案 3 :(得分:0)
问题是我从数据库填充的表包含一些重音字符,因此json_encode()失败。
解决方案是在PDO实例的第一个参数中添加charset=UTF8
。
$connexion = new PDO("mysql:host=localhost;dbname=world;charset=UTF8", 'root', 'toor');