因此,在遍历字符串并将其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”数组等。
预先感谢!
您可以为此使用递归函数。
function nest(string $str, int $i = 0) {
return isset($str[$i]) ? [$str[$i] => nest($str, $i + 1)] : ['result' => $str];
}
$result = nest($string);
这里是您要实现的目标的解决方案。请参阅带有注释的有效解决方案here,以说明其有效。
$val = 'ADAM';
$arr = [];
$keys = str_split($val);
$curr = &$arr;
foreach($keys as $key) {
$curr = &$curr[$key];
}
$curr = ['result' => $val];
print_r($arr);
您可以使用引用,以便在浏览字符串时将下一个字符添加为数组的键,然后将此新条目设置为循环中下一个操作的添加点...
$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
)
)
)
)
)