如何将项目推入 php 中的数组

How to push items into array in php

我正在使用 Laravel 和 ES 并尝试构建动态查询。

但以下内容不起作用:

$query[] = ['term' => ['city' => 1]];
$query[] = ['term' => ['state' => 2]];
$query[] = ['range' => ['price' => ['lte' => 2]]];


$asd = ['filtered' => [
        'query' => [
            'match' => ['title' => Input::get('query')]
        ],
        'filter'=> [
            'bool' => [
                'must' => [
                    ['term' => [ 'is_active' =>  1] ],
                    [ 'range' => [
                        'end_date' => [
                            'from' => 'now'
                        ]
                    ]
                    ],
                    $query
                ]
            ]
        ],
    ],];


echo json_encode($asd);

这会将错误的 $query[] 追加到 $asd 中,例如:

{"term":{"is_active":1}},
{"range":{"end_date":{"from":"now"}}},
[
{"term":{"city":1}},
{"term":{"state":2}},
{"range":{"price":{"lte":2}}}
]

我想附加的方式是:

{"term":{"is_active":1}},
{"range":{"end_date":{"from":"now"}}},
{"term":{"city":1}},
{"term":{"state":2}},
{"range":{"price":{"lte":2}}}

周围没有 []。

已解决:

$asd = ['filtered' => [
        'query' => [
            'match' => ['title' => Input::get('query')]
        ],
        'filter'=> [
            'bool' => [
                'must' => 
                    $query

            ]
        ],
    ],];

有效的 json 字符串总是由单个对象或对象数组组成。
您要求的字符串不合法 json,将无法解析。

Json 单个对象看起来像这样:

{ // Object start.
  "property": "value" // Where value could be a object or array or whatever.
} // Object end.

如果数组:

[ // Array start.
  "Array value" // which could be an object or another array or whatever.
] // Array end.

当您将包含关联数组的 PHP 数组转换为包含对象数组的字符串。

如果您希望它看起来像您描述的那样,您可以随时从字符串中删除 [],但它将无效 json。


编辑:

一个弹性查询基本上是这样的:

{ 
    "query": {
        "term": { data ... }
    }
}

我猜你 want/need 要做的是像这样创建 php 数组:

$query = [
    'query' => [
        'term' => [
            'state' => 2
            'city' => 1
        ],
        'range' => [
            'price' => [
                'lte' => 2
            ]
        ]
    ]
]

这将导致 JSON 字符串如下所示:

{ 
    "query": 
    { 
        "term": 
        { 
            "state": 2,
            "city": 1
        },
        "range": 
        {
            "lte": 2
        }
    } 

}