2017-07-06 1 views
2

J'ai besoin de calculer dynamiquement mes clés multidimensionnelles pour une aggegration dans Elasticsearch.PHP crée dynamiquement des clés multidimensionnelles

Je les ai suivantes

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

Mais aggs et a besoin nom d'être archivés dans une boucle. Ainsi, par exemple:

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

// looping 

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

// looping 

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

// etc 

Les clés du tableau doit être calculée avec les touches aggs et name

Comment puis-je créer dynamiquement des clés dans un tableau?

Merci

+0

1ère itération ajoute juste 'aggs'? et à partir du 2ème ajoute '[nom] [aggs]'? – Edwin

+0

avoir un extrait? Parce que je ne peux pas ajouter les crochets, ils doivent être peuplés – erwinnandpersad

Répondre

1

J'espère que c'est ce que vous voulez. J'ai créé un tableau avec des clés. Ensuite, traverser ce tableau pour créer une matrice de dimension multiples

$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

utiliser la fonction 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); 

vérifier ici: https://3v4l.org/HmlYD