2017-07-06 180 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