创建“objects"和“;arrays"以一种允许JS区分它们的方式在PHP中
Creating "objects" and "arrays" in PHP in a way that would allows JS to distinguish between them
PHP创建数组(索引或关联)的语法是相同的,也就是
$arr = [];
然而,json_encode
将把一个空的PHP"数组"(注意引号)转换为一个空的JS数组([]
),这在某些情况下是不可取的。
是否有一种方法,我可以在PHP中创建一个空的关联数组,所以json_encode
将其转换为一个空的JS对象,又名{}
,而不是[]
。
您可以使用stdClass
:
$obj = new stdClass();
echo json_encode($obj);
这就得到了预期的{}
输出。
使用stdClass()
:
php > $x = new StdClass;
php > echo json_encode($x);
{}
当然,一旦它成为标准类,你就不能再把它当作数组来使用了。但这至少是在JSON中强制使用空对象的一种方法,因此您可以对代码进行特殊处理:
if (count($array) == 0) {
$json = json_encode(new StdClass);
} else {
$json = json_encode($array);
}
您可以将JSON_FORCE_OBJECT
选项传递给json_encode
函数。这将强制所有空数组也成为对象。
JSON_FORCE_OBJECT (integer)输出对象而不是数组当使用非关联数组时。尤其在输出的接收者期待一个对象,并且数组为空。从PHP 5.3.0开始可用。
:
if (empty($array)) {
$json = json_encode([], JSON_FORCE_OBJECT);
} else {
$json = json_encode($array);
}
在我看来,这看起来比转换对象更干净。
或者
$json = json_encode($array, empty($array) ? JSON_FORCE_OBJECT : 0);
相关文章:
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- "未捕获的语法错误:意外的标记"角度JS
- html,js-如何限制元素"范围“-命名空间
- "可以't查找变量:window“;在suds.js中
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 如何创建js常量对象与"依赖/相对;价值观
- "TypeError:t.start未定义”;,在fullcalendar.min.js中,同时在我的网站上使
- "回声“;Node.js中的图像
- 显示“<script src='some.js'></脚本>"在Html文档中
- Django,HTML,JS:<img src=“#">可以在HTML中工作,但不能在JS文件中工作
- linkedin js"获取我的关系”;问题
- "现代的“;在Google Maps JS API v3上使用字母标记
- “*[attribute ^="string”是如何/为什么是有效的querySelector?(JS bug
- 在Asp.net的空网站中,如何改变"Web.config”;使内容(.js)文件显示在浏览器中,而不是下载
- 改变与“"至“-"(JS/Jquery)
- 重复“;function(){}.调用(this)"在Uglified JS中
- Sails.js+Grunt"找不到模块“”;错误
- 要求JS 2.1.9引起“;最大调用堆栈"使用Grunt时出错
- "捆绑;仅适用于HTML/JS的解决方案
- JS/JQuery:动态添加"图案“;以及“;标题“;属性以形成输入