erwinnandpersad
erwinnandpersad

Reputation: 386

PHP dynamically create multidimensional array keys

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

Answers (2)

Edwin
Edwin

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

B. Desai
B. Desai

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;
}

Example

Upvotes: 10

Related Questions