Reputation: 386
I need to dynamically compute my multidimensional array keys for an aggegration in Elasticsearch.
I have the following
$aggs['aggs']['name']
But aggs and name needs to be populated in a loop. So for example:
$aggs['aggs']['name']['aggs'] = $glue;
// looping
$aggs['aggs']['name']['aggs']['name']['aggs'] = $glue;
// looping
$aggs['aggs']['name']['aggs']['name']['aggs']['name']['aggs'] = $glue;
// etc
The array keys needs to be computed with the keys aggs
and name
How can i dynamically create keys in an array?
Thanks
Upvotes: 3
Views: 3173
Reputation: 2278
use the array_walk_recursive
function
<?php
$aggs['aggs']['name'] = "name";
function addEnd(&$item, $key)
{
if(is_array($item)){
return;
}elseif($key=='aggs'){
$item=['name'=> ['aggs' => $item]];
}else{
$item=['aggs' => $item];
}
}
for($i=0; $i<5; $i++){ // your loop
array_walk_recursive($aggs, 'addEnd');
}
var_dump($aggs);
check it here: https://3v4l.org/HmlYD
Upvotes: -1
Reputation: 16436
Hope this is what you want. I have created one array with keys. Then traverse that array to create multi dimension array
$keys = array("aggs","name","aggs","name","aggs");
$aggs = array();
$aggs = add_keys_dynamic($aggs,$keys,"test");
echo "<pre>";
print_r($aggs);
function add_keys_dynamic($main_array, $keys, $value){
$tmp_array = &$main_array;
while( count($keys) > 0 ){
$k = array_shift($keys);
if(!is_array($tmp_array)){
$tmp_array = array();
}
$tmp_array = &$tmp_array[$k];
}
$tmp_array = $value;
return $main_array;
}
Upvotes: 10