如何将项目推入 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
}
}
}
我正在使用 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
}
}
}