在PHP中处理JSON数组以及对象-php教程

资源魔 11 0
正在 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数组和工具的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!