如果键已存在,如何将键/值对作为分隔元素推送到数组?

时间:2018-03-16 23:07:36

标签: php arrays loops multidimensional-array foreach

那就是关于easticsearch查询逻辑...我需要发送带有这样一个数组的查询:

`"query" => array:2 [▼
    "match" => array:2 [▼
      "location" => array:2 [▼
        "query" => "USA"
      ],
    "match" => array:2 [▼
      "car" => array:2 [▼
        "query" => "FORD"          ]
    ]
  ]`

当我们尝试使用相同的密钥生成数组时,问题就出现了:

   $rules['query'] = [];
   foreach ($field_value_array as $key => $value) {   
                    $match['match'][$key] = [
                      'query' => $value ]; 
                    $rules['query'] =  $match;
            }

PHP会自动删除它们并只留下最后一个。 array_push函数在这种情况下不起作用。

你是我的最后希望。

1 个答案:

答案 0 :(得分:1)

"match"数组中没有"query"个密钥。

然后,您遗失[]$rules['query'] = $match;,因此,最后一个值会覆盖前一个值,而您只会获得最后一个值。

最后,您将获得额外的"索引"使用['query' => $value ],您可以使用$match['match'][$key]['query'] = $value;

您可以尝试这样的事情:

$field_value_array=['location' => 'USA','cars' => 'FORD'];
$rules['query'] = [];
foreach ($field_value_array as $key => $value) {
    $match=[]; // reset $match to avoid duplicate keys
    $match['match'][$key]['query'] = $value;
    $rules['query'][] =  $match;
}
print_r($rules);

输出:

Array (
    [query] => Array (
            [0] => Array (
                    [match] => Array (
                            [location] => Array (
                                    [query] => USA
                                )
                        )
                )
            [1] => Array (
                    [match] => Array (
                            [cars] => Array (
                                    [query] => FORD
                                )
                        )
                )
        )
)