如何在php中将项目推送到数组中

时间:2015-03-15 09:14:56

标签: php mysql arrays laravel elasticsearch

我正在使用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

            ]
        ],
    ],];

1 个答案:

答案 0 :(得分:1)

有效的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 ... }
    }
}

我猜你想要/需要做的就是像这样创建php数组:

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

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

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

}