2015-03-15 3 views
0

Я использую Laravel с ES и пытаюсь построить динамический запрос.Как перенести элементы в массив в php

Но следующий не работает:

$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); 

Это добавит $ запрос [] неправильно в $ 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 

      ] 
     ], 
    ],]; 
+0

'[]' указывает, что объекты находятся в массиве. Без скобок это не было бы законным json. – Jite

+0

@Jite [] не должен быть в нем, ES вернет ошибку, если я отправлю этот запрос. Проверьте мое обновление. – user2722667

+0

Что такое ES? И почему он попросил недействительного json? – Jite

ответ

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.


Edit:

Упругая запрос выглядит в основном так:

{ 
    "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 
     } 
    } 

} 
Смежные вопросы