php - 将字符串拆分为多维数组

时间:2013-02-19 07:00:47

标签: php multidimensional-array

我试图将导航位置字符串拆分为主数组。

例如,如果我有一个位置为1.2.2的项目

我想将它添加到主数组中,如下所示

 1 =>
    2 =>
        2 => array()

然后如果另一个项目有'2.1'

 1 =>
    2 =>
        2 => array()
 2 =>
    1 => array()

然后是另一个'1.2.3'

 1 =>
    2 =>
        2 => array()
        3 => array()
 2 =>
    1 => array()

有没有人知道这样做的方法?

问候

修改

假设我有一个对象的一维数组,我想循环遍历它们并存储为嵌套数组的结构化“导航”。每个项目都有一个导航位置字符串,即 1.2.3.6

然后我想到$depth = explode( '.', $details['navigation_pos'] );通过某种数组walker运行它来将对象放在正确的位置。

希望这会有所帮助

修改

或许更好的方式就是这样,但更优雅:

$depth = explode( '.', '1.2.3.4' );
$bar = json_decode( '{"' . implode( '":{"', $depth ) . '":[]' . str_repeat( '}', sizeof( $depth ) ) );
print_r($bar);

会给出

stdClass Object
(
    [1] => stdClass Object
        (
            [2] => stdClass Object
                (
                    [3] => stdClass Object
                        (
                            [4] => Array
                                (
                                )

                        )

                )

        )

)

1 个答案:

答案 0 :(得分:0)

您可以使用eval()构造,但要注意:

  

eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。

$final_array = array(); // The output array

/*
    Example:
    $big_array = array(
        '1.1' => 'One-one',
        '2.1.3.4' => 'Two-one-three-four'
    );
*/  

foreach ($big_array as $position_string => $item)
{
    $index_array = explode(".", $position_string);

    foreach ($index_array as $key => $value)
    {       
        // Make sure only integers are put through eval()
        $index_array[$key] = (int)$value;
    }

    $indexes = implode("][", $index_array);

    // TODO: make sure $item is safe to put through eval()!
    eval("\$final_array[{$indexes}] = \$item");
}