我试图将导航位置字符串拆分为主数组。
例如,如果我有一个位置为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
(
)
)
)
)
)
答案 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");
}