2

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

例如,如果我有一个位置为 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()

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

问候

编辑

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

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

希望这可以帮助

编辑

也许更好的说法是这样,但更优雅:

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

                        )

                )

        )

)
4

1 回答 1

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");
}
于 2013-02-19T07:44:28.730 回答