【问题标题】:Format simpe array in multidimensional在多维中格式化simpe数组
【发布时间】:2021-01-27 05:34:53
【问题描述】:

我在 PHP 中有一个这样的简单数组:

Array
(
    [max_size_video] => 50000
    [max_size_photo] => 8000
    [token_expire] => 100
    [dns] => mydns.fr
    ...
)

我想将此数组转换为多维宽度下划线作为分隔符:

Array
(
    [max] => Array
        (
            [size] => Array
                (
                    [video] => 50000
                    [photo] => 8000
                )
        )
    [token] => Array
        (
            [expire] => 100
        )
    [dns] => mydns.fr
    ...
)

我可以用以下丑陋的代码做到这一点:

$item = explode('_', $row);
switch (count($item)) {
  case 1:
    $array[$item[0]] = $value;
  break;
  case 2:
    $array[$item[0]][$item[1]] = $value;
  break;
  case 3:
    $array[$item[0]][$item[1]][$item[2]] = $value;
  break;
  case 3:
    $array[$item[0]][$item[1]][$item[2]][$item[3]] = $value;
  break;
  ...
}

如何使用漂亮的功能做到这一点? 谢谢回复

【问题讨论】:

标签: php arrays format


【解决方案1】:

通过迭代并逐个分支添加到结果数组很容易实现。像这样的。

<?php

$array = [
    'max_size_video' => 50000,
    'max_size_photo' => 8000,
    'token_expire'   => 100,
    'dns'            => 'mydns.fr',
];

$result = [];

foreach ($array as $key => $value) {
    $branch = &$result;
    foreach (explode('_', $key) as $innerValue) {
        $branch = &$branch[$innerValue];
    }
    $branch = $value;
}

var_dump($result);

结果数组如下所示。

array(3) {
  ["max"]=>
  array(1) {
    ["size"]=>
    array(2) {
      ["video"]=>
      int(50000)
      ["photo"]=>
      int(8000)
    }
  }
  ["token"]=>
  array(1) {
    ["expire"]=>
    int(100)
  }
  ["dns"]=>
  &string(8) "mydns.fr"
}

【讨论】:

  • 有点问题,如果我有: $array = [ 'max_size' => 10, // php 'max_size_video' => 50000, 'max_size_photo' => 8000, 'token_expire' 中的错误=> 100, 'dns' => 'mydns.fr', ];
  • 请使用新的输入数组和预期结果更新您的问题。不确定您对 $array = [ 'max_size' =&gt; 10, 'max_size_video' =&gt; 50000, 'max_size_photo' =&gt; 8000, 'token_expire' =&gt; 100, 'dns' =&gt; 'mydns.fr', ]; 的期望结果是什么
猜你喜欢
  • 2021-05-13
  • 1970-01-01
  • 2021-10-28
  • 2021-12-02
  • 2014-09-05
  • 2021-08-24
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多