在PHP向JavaScript传递数组的时候不能直接向JavaScript传递php的数组,需要将PHP的数组编码后传递给JavaScript才能被识别。
编码的过程中需要使用到PHP中的一个编码函数string json_encode ( mixed $value [, int $options = 0 ] )
;
该函数的参数以及返回值介绍:
value:待编码的value,出来resource类型之外,可以为任何的数据类型,同时需要注意的是,该方法只能接收UTF-8编码的数据。
options:该参数有以下常量组成的二进制掩码:JSON_HEX_QUOT , JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_NUMERIC_CHECK , JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , JSON_FORCE_OBJECT , JSON_UNESCAPED_UNICODE .
返回值:编码成功则返回一个一JSON形式表示的string或者在失败是返回FALSE。
与之对应的还有一个json_deconde方法,该方法也就是json_encode()方法的一个逆过程。
mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
该函数的参数以及返回值说明:
**$json:**待解码的json string格式的字符串。
**assoc:**当该参数为TRUE时,将返回array数组类型而不是object类型。
**depth:**用户指定的递归深度。
**options:**JSON解码选项的位掩码。目前只支持JSON_BIGINT_AS_STRING(默认情况下将大整数转换为浮点数)。
注: 后面这两个参数没有使用过!是按照手册上的说法翻译过来的!
返回值 返回值根据第二、三、四个参数来决定,如果解码过程中超过了递归的深度或者不能被解码,则返回NULL。如果能解码,同时没有超过指定的递归深度,便要根据第二个参数来决定返回的是array类型还是object类型。
实例:1.json_encode()的使用
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset:utf-8">
<script content="text/javascript">
function form_s(arr) {
alert(arr);
}
</script>
</head>
<body>
<?php
$arr = array();
$arr[0] = '计算机系';
$arr[1] = '数学系';
$arr[2] = '外语系';
$str = json_encode($arr);
echo "<script type='text/javascript'>form_s($str)</script>"
?>
</body>
</html>
上述实例的运行结果如下:
实例:2. json_decode()方法的使用
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}' ;
var_dump ( json_decode ( $json ));
var_dump ( json_decode ( $json , true ));
?>
上述实例运行结果: