PHP动态创建多维数组键

3

我需要动态计算Elasticsearch中聚合操作的多维数组键。

我有以下代码:

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

但是,aggs和name需要在循环中填充。 例如:

 $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 来计算数组键。

我如何动态创建数组键?

谢谢。


第一次迭代只添加 aggs,从第二次开始添加 [name][aggs] - Edwin
有代码片段吗?因为我无法添加括号,它们需要被填充。 - erwinnandpersad
2个回答

10

希望这是您想要的。我创建了一个带有键的数组,然后遍历该数组以创建多维数组。

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

示例


快速简单。救了我的一天,谢谢。 - YusufFidan

-1
使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接