各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

在PHP中处理JSON数组以及对象

管理员 2023-09-05
PHP
113

在PHP中处理JSON数组以及对象

内容导读

收集整理的这篇技术教程文章主要介绍了在PHP中处理JSON数组以及对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2925字,纯文字阅读大概需要5分钟

内容图文

在 PHP 中处理 JSON 数组以及对象

与客户端混淆的常见原因是围绕 JSON 数组和对象,以及如何在 PHP 中指定他们。特别是,问题是由空对象和数组对象引起的,此页面将向您展示 Elasticsearch JSON API 中使用的一些常见模式,以及如何将其转换为 PHP 的表现形式。

空对象

Elasticsearch API 在多个位置上使用空的 JSON 对象,这可能会给 PHP 带来问题。与其他语言不同,PHP 没有空对象的「简短」表现形式。因此许多开发人员不知道如何指定空对象。

考虑在查询中添加突出显示:

{    "query" : {        "match" : {            "content" : "quick brown fox"        }    },    "highlight" : {        "fields" : {            "content" : {} (1)        }    }}

1.这个空的 JSON 对象是导致问题的原因。

问题是 PHP 会自动转换 "content" : {} 成 "content" : [],这样将不再是有效的 Elasticsearch DSL。我们需要告诉 PHP 空对象是一个显示对象,而不是数组 。 在 PHP 中 定义此查询, 您可以:

$params['body'] = array(    'query' => array(        'match' => array(            'content' => 'quick brown fox'        )    ),    'highlight' => array(        'fields' => array(            'content' => new stdClass() (1)        )    ));$results = $client->search($params);

我们使用通用的 PHP stdClass 对象来表示一个空对象,JSON 将会被正确解码。

通过使用显示的 stdClass 对象,我们可以强制使用 json_encode 解析器正确的输出空对象,而不是空数组。 遗憾的是,这个冗长的解决方案,是在 PHP 中实现目标的唯一方法...... 并没有空对象的「简短」版本。

对象数组

Elasticsearch DSL 中的另一种常见模式是对象数组。例如,考虑为查询添加排序:

{    "query" : {        "match" : { "content" : "quick brown fox" }    },    "sort" : [  (1)        {"time" : {"order" : "desc"}},        {"popularity" : {"order" : "desc"}}    ]}

1.「sort」包含一组 JSON 对象

这种安排很常见,但是 PHP 的结构可能很复杂。 因为他需要嵌套数组。PHP 的冗长往往会掩盖实际发生的事。要构造一个对象数组,实际上需要一个数组数组 :

$params['body'] = array(    'query' => array(        'match' => array(            'content' => 'quick brown fox'        )    ),    'sort' => array(    (1)        array('time' => array('order' => 'desc')),  (2)        array('popularity' => array('order' => 'desc')) (3)    ));$results = $client->search($params);

1.该数组对 "sort" : [] 数组进行编码

2.该数组对 {"time" : {"order" : "desc"}} 对象进行编码

3.该数组对 {"popularity" : {"order" : "desc"}} 对象进行编码

如果您使用 5.4+ 以上的版本,我强烈建议你使用短数组语法。它使这些嵌套数组更容易阅读:

$params['body'] = [    'query' => [        'match' => [            'content' => 'quick brown fox'        ]    ],    'sort' => [        ['time' => ['order' => 'desc']],        ['popularity' => ['order' => 'desc']]    ]];$results = $client->search($params);

空对象数组

有时, 您会遇到前面两种模式的 DSL . 这个得分函数的查询是一个很好的例子,有时他需要一个空的对象数组,其中一些对象可能是空的 JSON 对象。

例如这种查询:

{   "query":{      "function_score":{         "functions":[            {               "random_score":{}            }         ],         "boost_mode":"replace"      }   }}

我们可以使用以下 PHP 代码构建它:

$params['body'] = array(    'query' => array(        'function_score' => array(            'functions' => array(  (1)                array(  (2)                    'random_score' => new stdClass() (3)                )            )        )    ));$results = $client->search($params);

1.它对对象数组进行编码: "functions" : []

2.它对数组中的对象进行编码: { "random_score": {} }

3.T 它对空的 JSON 对象进行编码: "random_score": {}

推荐:【PHP教程】

以上就是在PHP中处理JSON数组以及对象的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的在PHP中处理JSON数组以及对象全部内容,希望文章能够帮你解决在PHP中处理JSON数组以及对象所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

扫码关注

qrcode

QQ交谈

回顶部