为什么json_encode不会编码这个特定的数组,而是编码具有相同结构的其他数组?

时间:2015-07-29 08:38:04

标签: php arrays json api encoding

我创建了一个API,将数据从表格编码为数组,然后编码为json。

 <?php
header('Content-type: application/json');
header("Access-Control-Allow-Origin: *");

...(connection to db)... :p

        $query = "SELECT * FROM gdb.".$_GET['tb'];
        $result = mysqli_query($conn,$query);



$posts =array();

while ($row = mysqli_fetch_assoc($result))
{

    $posts[] = array('ONE'=>$row);




}

$all = array('ALL'=>$posts);
echo json_encode($all);//($posts);
mysqli_close($conn);
?>

它似乎与其他表一起使用但是使用这个特殊的表,json_encode似乎不起作用..

这是表中不会编码为json的数组:

array(1) {
  ["ALL"]=>
  array(61) {
    [0]=>
    array(1) {
      ["ONE"]=>
      array(12) {
        ["id_product"]=>
        string(1) "2"
        ["id_shop"]=>
        string(1) "1"
        ["id_lang"]=>
        string(1) "1"
        ["description"]=>
        string(72) "<p> BUY 5-KILOS  RICE FREE SARDINES 155G.SAVE 10.00</p>"
        ["description_short"]=>
        string(0) ""
        ["link_rewrite"]=>
        string(20) "5-kilos-rice"
        ["meta_description"]=>
        string(0) ""
        ["meta_keywords"]=>
        string(0) ""
        ["meta_title"]=>
        string(0) ""
        ["name"]=>
        string(40) "5-KILOS RICE FREE SARDINES"
        ["available_now"]=>
        string(0) ""
        ["available_later"]=>
        string(0) ""
      }
    }
    [1]=>
    array(1) {
      ["ONE"]=>
      array(12) {
        ["id_product"]=>
        string(1) "3"
        ["id_shop"]=>
        string(1) "1"
        ["id_lang"]=>
        string(1) "1"
        ["description"]=>
        string(78) "<p>BUY 10-KILOS RICE FREE SARDINES RED 155G.SAVE 20.00</p>"
        ["description_short"]=>
        string(0) ""
        ["link_rewrite"]=>
        string(21) "10-kilos-rice"
        ["meta_description"]=>
        string(0) ""
        ["meta_keywords"]=>
        string(0) ""
        ["meta_title"]=>
        string(0) ""
        ["name"]=>
        string(41) "10-KILOS RICE FREE SARDINES"
        ["available_now"]=>
        string(0) ""
        ["available_later"]=>
        string(0) ""
      }
    }
}}

我的代码能够编码为json的数组具有相同的结构。只是不同数量的字段和内容所以我不知道为什么使用这个特定的数组,它将无法正常工作。

我想。也许一些描述字符串(不包括我的样本中的所有字符串)都有引号,双引号,斜杠,这就是为什么它不能编码为json所以我在while循环中这样做了:

$posts[] =  array('ONE'=>array_map("addslashes",$row));

而不是:

$posts[] = array('ONE'=>$row);

但它仍然没有编码为json。我使用array_map错了吗?还是有其他原因导致它不能编码为json?

1 个答案:

答案 0 :(得分:1)

我只需要添加此

mysqli_set_charset($conn,"utf8");
毕竟在mysqli_select_db()之前

:B