我尝试将每个字母拆分一个单词,并将每个字母放在前一个数组中。
法典:
$array = [];
$word = "test";
for($i = 0; $i < strlen($word); $i++){
// $array[$word[$i]] = ...
}
我不明白如何保持对上一个数组的"引用"。
我试图得到什么(单词:"测试"):
Array
(
[t] => Array
(
[e] => Array
(
[s] => Array
(
[t]
[word] => "test"
)
)
)
)
https://eval.in/243876
$word = "test";
$wordarray = str_split($word);
$result = array();
$tmp = array();
foreach($wordarray as $i => $letter) {
if($i==0) {
$tmp[$wordarray[strlen($word)-($i+1)]]["word"] = $word;
} else {
$tmp = array();
$tmp[$wordarray[strlen($word)-($i+1)]] = $result;
}
$result = $tmp;
}
var_dump($result);
或者更优雅的方式:
<?php
$word = "test";
$wordarray = array_reverse(str_split($word));
$result = array();
$tmp = array();
foreach($wordarray as $i => $letter) {
if($i == 0) {
$tmp[$letter]["word"] = $word;
} else {
$tmp = array();
$tmp[$letter] = $result;
}
$result = $tmp;
}
var_dump($result);
https://eval.in/243937
输出
array(1) {
["t"]=>
array(1) {
["e"]=>
array(1) {
["s"]=>
array(1) {
["t"]=>
array(1) {
["word"]=>
string(4) "test"
}
}
}
}
}
单词"敬语"的输出:
array(1) {
["h"]=>
array(1) {
["o"]=>
array(1) {
["n"]=>
array(1) {
["o"]=>
array(1) {
["r"]=>
array(1) {
["i"]=>
array(1) {
["f"]=>
array(1) {
["i"]=>
array(1) {
["c"]=>
array(1) {
["a"]=>
array(1) {
["b"]=>
array(1) {
["i"]=>
array(1) {
["l"]=>
array(1) {
["i"]=>
array(1) {
["t"]=>
array(1) {
["u"]=>
array(1) {
["d"]=>
array(1) {
["i"]=>
array(1) {
["n"]=>
array(1) {
["i"]=>
array(1) {
["t"]=>
array(1) {
["a"]=>
array(1) {
["t"]=>
array(1) {
["i"]=>
array(1) {
["b"]=>
array(1) {
["u"]=>
array(1) {
["s"]=>
array(1) {
["word"]=>
string(27) "honorificabilitudinitatibus"
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
$word = 'test';
$root = [];
$array = &$root;
for($i = 0; $i < strlen($word); $i++){
$ch = $word[$i];
$new = [];
$array[$ch] = &$new;
$array = &$new;
}
$array['word'] = $word;
print_r($root);
我不知道你为什么要这样做,你是想尝试一下吗?