如何运行时从字符串创建多维数组。

时间:2016-12-25 13:21:40

标签: php arrays multidimensional-array

使用通用字符串$ a并将其展开为点es:

$b = explode(".", $a)

我如何在不知道count($b)值的情况下以动态方式运行代码:

if (count($b) == 1) {
    $c[$b[0]] = $var;
} elseif (count($b) == 2) {
    $c[$b[0]][$b[1]] = $var;
} elseif (count($b) == 3) {
    $c[$b[0]][$b[1]][$b[2]] = $var;
} ... {
    ...
} elseif (count($b) == n-1) {
    $c[$b[0]][$b[1]][$b[2]]...[$b[n-2]] = $var;
} elseif (count($b) == n) {
     $c[$b[0]][$b[1]][$b[2]]...[$b[n-1]] = $var;
} else {
     $c = $var;
}

这是一个虚假的代码,可以了解我的意思。

2 个答案:

答案 0 :(得分:2)

您有两种解决方案:

递归函数

第一种是使用递归函数,它将在数组上添加每个新元素。

评估方法

另一种方法,非常快......但它使用评估功能。我不是这样的忠实粉丝。当你知道所有方面对你的剧本产生影响时使用它。

php convert flat family list to tree

    import java.util.*;
public class example
{
public static void main(String[]args)
{
    int i = 1;
    int a = 4;
    while( i < 4 )
        {
            i++;
            a--;
            sleep(1000);
            System.out.println("\t\t\t\t The Game Begins In...");
            System.out.print("\t\t\t\t " + a);
        }

        }
   }

答案 1 :(得分:2)

解决方案不带 eval()和递归:

function split_to_multi($string, $value)
{
    $levels = explode('.', $string);
    $result = [];
    foreach (array_reverse($levels) as $key) {
        $result = [$key => $value];
        $value = $result;
    }

    return $result;
}

例如:

print_r(split_to_multi('foo.bar.baz', 123)); 

将输出:

Array
(
    [foo] => Array
        (
            [bar] => Array
                (
                    [baz] => 123
                )

        )

)