2017-07-06 152 views
2

我需要为Elasticsearch中的一个合并动态计算我的多维数组键。PHP动态创建多维数组键

我有以下

$aggs['aggs']['name']

但AGGS和名称需要在一个循环中进行填充。因此,例如:

$aggs['aggs']['name']['aggs'] = $glue; 

// looping 

$aggs['aggs']['name']['aggs']['name']['aggs'] = $glue; 

// looping 

$aggs['aggs']['name']['aggs']['name']['aggs']['name']['aggs'] = $glue; 

// etc 

数组键需要与钥匙aggsname

我怎么能动态地创建键在阵列中计算?

谢谢

+0

第一次迭代增加只是'aggs'?从第二个添加'[名字] [aggs]'? – Edwin

+0

有一个片段?因为我不能添加括号,他们需要填充 – erwinnandpersad

回答

1

希望这是你想要的。我用键创建了一个数组。然后遍历数组创建多维度阵列

$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

0

使用array_walk_recursive功能

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

点击此处查看:https://3v4l.org/HmlYD