比如$arr=array('a','b','c','d'); 长度不固定;
要变成$arr['a']['b']['c']['d'], 按照顺序的;
请问有啥办法?
1
dajj 2022-01-12 15:52:11 +08:00
太简单了, 你再想想
|
2
FaceBug 2022-01-12 15:52:26 +08:00 1
那你的值是什么呢? null ?
|
3
tellmeworld OP @FaceBug 后续有判断的,是判断如果一维数组$arr 不为空,就变成多维数组,并赋值一个特定的数给它。
|
4
BJL 2022-01-12 16:00:45 +08:00 2
$src = ['a','b','c','d'];
$output_v = ""; for($i = count($src) - 1;$i >= 0;$i--){ $v = $src[$i]; $v_prev = $src[$i + 1] ?? ""; $output[$v] = $output ?? $output_v; unset($output[$v_prev]); } echo json_encode($output); |
5
tellmeworld OP 厉害,我刚想到可能先转化为 json 字符串形式,然后再转换,你已经写好了
|
6
q792602257 2022-01-12 16:03:03 +08:00 1
仅供参考
```php /** * @var string[] 必须是能作为数组键的值 */ $arr = array("a", "b", "c", "d", "e"); $newArr = array(); // 引用新的数组 $newArrPointer = &$newArr; while (sizeof($arr) > 0) { // 移出第一个元素,作为键名 $key = array_shift($arr); // 对上一个引用,做修改操作 $newArrPointer[$key] = array(); // 重新引用新的数组 $newArrPointer = &$newArrPointer[$key]; } // 如果需要赋值,在这里赋值 $newArrPointer = 777; // 释放引用 unset($newArrPointer); print_r($newArr); ``` |
7
BJL 2022-01-12 16:06:12 +08:00
@tellmeworld 楼上那个比较好
|
8
FaceBug 2022-01-12 16:24:24 +08:00 1
|
9
yEhwG10ZJa83067x 2022-01-12 16:36:35 +08:00
@tellmeworld 你需要的结果是这样的?
~~~php array(1) { ["a"]=> array(1) { ["b"]=> array(1) { ["c"]=> array(1) { ["d"]=> array(1) { ["e"]=> int(777) } } } } } |
10
FaceBug 2022-01-12 16:38:43 +08:00
$src = ['a', 'b', 'c', 'd'];
$output = ""; while (count($src) > 0) { $tmp = []; $output = $tmp[array_pop($src)] = $output; $output = $tmp; } print_r($output); |
11
ntuwang 2022-01-13 10:30:27 +08:00
你头像有政治错误啊,湾湾木了啊
|
12
totoro52 2022-01-13 11:48:55 +08:00
换个头像吧 你这头像肯定是青蛙画的
|
13
houshengzi 2022-01-13 20:25:34 +08:00
内置函数,array_fill_keys 应该可以满足到
|
14
RickyC 2022-01-14 11:00:03 +08:00
```
public function test() { //原数组 $arr1 = ['a', 'b', 'c', 'd']; //结果数组 $arr2 = []; //初始化指针 $tmp = &$arr2; foreach ($arr1 as $value) { //将 value 转化为键 $tmp[$value] = []; //更新指针 $tmp = &$tmp[$value]; } //查看结果 echo '<pre>'; var_dump($arr2); } ``` 不知道对不对 |