将每个单词的单词拆分为数组中的数组


split word into array within array for each word

我尝试将每个字母拆分一个单词,并将每个字母放在前一个数组中。

法典:

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

我不知道你为什么要这样做,你是想尝试一下吗?