寻找一种构建多维的多层关联数组的方法

问题描述 投票:0回答:3

因此,在遍历字符串并将其chars作为索引数组插入多维关联数组时遇到麻烦。因此,基本上是一维多维数组中的一维多维数组。这有点麻烦,因为我无法手动完成。我需要一种自动化的方法来处理一堆字符串。以下示例将对它进行一些解释,我认为:

//string i want to enter
$string = 'ADAM';
//array i want to end up with
$result = array
              (
                'A'=> array
                 (
                  'D'=>array
                   (
                    'A'=>array
                     (
                      'M'=>array
                        (
                          'result'=>'ADAM'
                        )
                     )
                   )
                 )
               )

我最初的方法只是使用if-conditions将第一个Char作为数组插入到主数组中,例如:

for($i = 0; $i < strlen($string); $i++){
      if($i == 0){
       $array1[$word[$i]] = array();
      }
}

效果很好。但是后来我遇到了问题:如何跟踪数组中的当前点?在if-check之后,我会寻找一个else语句,该语句在$ i大于0时起作用。但是,如果我想插入数组的下一个维,在这种情况下为'D',则需要选择$ array1 ['A'],接下来,我将需要$ array1 ['A'] ['D']等。我无法找到一种方法。我需要进入此数组的字符串范围为4-70个字符。我所知道的每种方法都只改变了第二维,所以我最终得到了:

$array1('A'=>array ('A' =>array()));
$array1('A'=>array ('D' =>array()));
$array1('A'=>array ('A' =>array()));
$array1('A'=>array ('M' =>array()));

或由索引本身是数组引起的非法偏移错误。也许我的方法在这里行不通,但我仍然认为我可能会问我是否错过了一些事情。

在稍后阶段,我希望对所有字符串使用相同的数组,因此我基本上将Chars用作节点。如果已经存在'A'作为第一个字符,则我将跳过它并将下一个字符串的第二个char插入“ A”数组等。

预先感谢!

php arrays multidimensional-array associative-array
3个回答
2
投票

您可以为此使用递归函数。

function nest(string $str, int $i = 0) {
    return isset($str[$i]) ? [$str[$i] => nest($str, $i + 1)] : ['result' => $str];
}

$result = nest($string);

1
投票

这里是您要实现的目标的解决方案。请参阅带有注释的有效解决方案here,以说明其有效。

$val = 'ADAM';
$arr = [];
$keys = str_split($val);
$curr = &$arr;
foreach($keys as $key) {
    $curr = &$curr[$key];
}
$curr = ['result' => $val];

print_r($arr);

1
投票

您可以使用引用,以便在浏览字符串时将下一个字符添加为数组的键,然后将此新条目设置为循环中下一个操作的添加点...

$string = 'ADAM';
$result = [];
$add = &$result;
for($i = 0; $i < strlen($string); $i++){
    $add = &$add[$string[$i]];
}
$add['result'] = $string;
print_r($result);

仅显示添加多个条目的工作方式...

addEntry ( $result, "ADAM");
addEntry ( $result, "ALAN");
addEntry ( $result, "ADAME");

function addEntry ( &$result, string $newValue )  {
    for($i = 0; $i < strlen($newValue); $i++){
        $result = &$result[$newValue[$i]];
    }
    $result['result'] = $newValue;
}

结果...

Array
(
    [A] => Array
        (
            [D] => Array
                (
                    [A] => Array
                        (
                            [M] => Array
                                (
                                    [result] => ADAM
                                    [E] => Array
                                        (
                                            [result] => ADAME
                                        )

                                )

                        )

                )

            [L] => Array
                (
                    [A] => Array
                        (
                            [N] => Array
                                (
                                    [result] => ALAN
                                )

                        )

                )

        )

)
© www.soinside.com 2019 - 2024. All rights reserved.