想实现的功能为:
先从数据库读取一个二维数组:
 $rows=$cnAppCenter->getStations($table,$col,$pid);
 $num=count($rows);
 $result=array();
 for($i=0;$i< $num ;$i++){
  $result[]=array(
  'id'=>$rows[$i]['id'],
  'bid'=>$rows[$i]['bid'],
  'destination'=>$rows[$i]['destination']
  );
  }
比如这个数组打印为:
Array
(
    [0] => Array
        (
            [id] => 27
            [bid] => 3
            [destination] => 乌江入境
        )    [1] => Array
        (
            [id] => 28
            [bid] => 3
            [destination] => 白涛工业园
        )

然后用调用json_encode:$da=JSON($result);
<script language="javascript">
var datas = eval(<?php echo $da;?>);
alert(eval(datas[0]['id']));
</script>
为什么会报datas 为空呢?请各位大侠帮帮忙,先谢了~
function arrayRecursive(&$array, $function, $apply_to_keys_also = false){    static $recursive_counter = 0;    if (++$recursive_counter > 1000) {        die('possible deep recursion attack');    }    foreach ($array as $key => $value) {        if (is_array($value)) {            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
  
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}
function JSON($array) {
    arrayRecursive($array, 'urlencode', true);
    $json = json_encode($array);
    return urldecode($json);
}

解决方案 »

  1.   

    json_encode()默认的是对返回一个对象,而不是数组,第二个参数设为true才可以
     $json = json_encode($array, true);至于arrayRecursive是否正确,你完全可以
    arrayRecursive($array, 'urlencode', true);
    print_r($array);
      

  2.   

    sorry,脑子糊涂又弄错了,json_encode()一个参数是正确的
      

  3.   

    其实我是想做一个地图,当用户选择一个地方后,显示出该地方的所有二级站点。请问,json输出后,怎样才能在js里用呢?
      

  4.   

    var datas = eval('(<?php echo $da;?>)');
      

  5.   

    输出的json为:
    [{"id":"27","bid":"3","destination":"乌江入境"},{"id":"28","bid":"3","destination":"白涛工业园"}] 
    请问,怎样才能在js里使用呢?
      

  6.   

    1、你的数据中有中文,所以一定要保证是 utf-8 编码的。因为 json_encode 只接受 utf-8 编码的数据
    2、你的 JSON 函数有可能破坏已生成的 json 数据的结构
    function JSON($array) {
      arrayRecursive($array, 'urlencode', true);
      $json = json_encode($array);
      return urldecode($json); //这里应为 return $json
    }
    人工进行 url 编码,将导致目标服务器要多一次 url 解码3、var datas = eval(<?php echo $da;?>); 这是错误的
    eval 的参数应该是字符串,要写作
    var datas = eval('<?php echo $da;?>');
    其实你这样就可以了
    var datas = <?php echo $da;?>;4、js 没有二维数组
    alert(eval(datas[0]['id']));
    应写作
    alert(eval(datas[0].id);datas 是对象数组
      

  7.   

    非常感谢您的回答,但是问题还是没解决。
    如果我的数组是$data = array
    (
         array
            (
                'id' => 1,
                'start_fee' => 1,
                'end_fee' => '测试',
                'fee_rate' => 0.14,
                'addtime' => 0
            ),
        array
            (
                'id'=> 2,
                'start_fee' => 20,
                'end_fee' => 100,
                'fee_rate' => 0.11,
                'addtime' => 0
            ) 
    );用alert(eval(datas[0]['end_fee']));能正确弹出"测试",但是一换回$result,就报null
      

  8.   

    改个错误,不是alert(eval(datas[0]['end_fee']));是alert(datas[0]['end_fee']);
      

  9.   

    9楼回答的很好了alert(datas[0].id);
    alert(datas[0].end_fee);  //这样也可以
      

  10.   

    比较一下 $result和$data经过 JSON() 后的处理结果,看看结构上有什么差异
      

  11.   

    完全一样,print_r出来的结构也是一模一样。
      

  12.   

    谢谢各位的帮助,虽然这种方法的问题没解决,但因此学会了另外一种方法,因此用另外的方法做个结贴吧。
    另外的方法就是改用$.ajax();
    function showMap(){
    output_text.open('地图加载中.....',3,3);
        var pid = $("#class1").val(); 
    $.ajax({
    type: "POST",
    url: "index.php?action=map",
    data: "uc=show&pid="+pid,
    beforeSend: function(){
    },
    success: function(result){
    load(result);
    }
    });
    }
    成功返回的result再传递给加载地图的函数来处理。