在PHP中如何處理JSON數(shù)組以及對象-創(chuàng)新互聯(lián)

在PHP中如何處理JSON數(shù)組以及對象?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為永仁企業(yè)提供專業(yè)的做網(wǎng)站、網(wǎng)站建設(shè),永仁網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

                                                           在 PHP 中處理 JSON 數(shù)組以及對象

與客戶端混淆的常見原因是圍繞 JSON 數(shù)組和對象,以及如何在 PHP 中指定他們。特別是,問題是由空對象和數(shù)組對象引起的,此頁面將向您展示 Elasticsearch JSON API 中使用的一些常見模式,以及如何將其轉(zhuǎn)換為 PHP 的表現(xiàn)形式。

空對象

Elasticsearch API 在多個位置上使用空的 JSON 對象,這可能會給 PHP 帶來問題。與其他語言不同,PHP 沒有空對象的「簡短」表現(xiàn)形式。因此許多開發(fā)人員不知道如何指定空對象。

考慮在查詢中添加突出顯示:

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

1.這個空的 JSON 對象是導(dǎo)致問題的原因。

問題是 PHP 會自動轉(zhuǎn)換 "content" : {} 成 "content" : [],這樣將不再是有效的 Elasticsearch DSL。我們需要告訴 PHP 空對象是一個顯示對象,而不是數(shù)組 。 在 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 對象,我們可以強(qiáng)制使用 json_encode 解析器正確的輸出空對象,而不是空數(shù)組。 遺憾的是,這個冗長的解決方案,是在 PHP 中實現(xiàn)目標(biāo)的唯一方法...... 并沒有空對象的「簡短」版本。

對象數(shù)組

Elasticsearch DSL 中的另一種常見模式是對象數(shù)組。例如,考慮為查詢添加排序:

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

1.「sort」包含一組 JSON 對象

這種安排很常見,但是 PHP 的結(jié)構(gòu)可能很復(fù)雜。 因為他需要嵌套數(shù)組。PHP 的冗長往往會掩蓋實際發(fā)生的事。要構(gòu)造一個對象數(shù)組,實際上需要一個數(shù)組數(shù)組 :

$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.該數(shù)組對  "sort" : [] 數(shù)組進(jìn)行編碼

2.該數(shù)組對  {"time" : {"order" : "desc"}} 對象進(jìn)行編碼

3.該數(shù)組對 {"popularity" : {"order" : "desc"}} 對象進(jìn)行編碼

如果您使用 5.4+ 以上的版本,我強(qiáng)烈建議你使用短數(shù)組語法。它使這些嵌套數(shù)組更容易閱讀:

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

空對象數(shù)組

有時, 您會遇到前面兩種模式的 DSL . 這個得分函數(shù)的查詢是一個很好的例子,有時他需要一個空的對象數(shù)組,其中一些對象可能是空的 JSON 對象。

例如這種查詢:

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

我們可以使用以下 PHP 代碼構(gòu)建它:

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

1.它對對象數(shù)組進(jìn)行編碼: "functions" : []

2.它對數(shù)組中的對象進(jìn)行編碼: { "random_score": {} }

3.T 它對空的 JSON 對象進(jìn)行編碼: "random_score": {}

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

網(wǎng)站題目:在PHP中如何處理JSON數(shù)組以及對象-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://bm7419.com/article42/dcoeec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)Google、企業(yè)網(wǎng)站制作定制網(wǎng)站、電子商務(wù)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作