将php数组转换为javascript文字对象

时间:2014-03-13 10:52:23

标签: php json

我有一个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" ); 

并且有效。

但是为什么第一个数组不会编码!

4 个答案:

答案 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');