Php 从字符串分解递归创建多维数组
我有一个数组,包含很多类别字符串,比如Php 从字符串分解递归创建多维数组,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我有一个数组,包含很多类别字符串,比如 Cars > Model1 Cars > Model1 > Accessories Cars > Model1 > Something Cars > Model2 Cars > Model3 我想递归地将其转换为多维数组,其中“Cars”是Model1、Model2和Model3的父元素 当然,“附件”和“某物”将是Model1的子元素 我已经试着找出这背后的逻辑很长一段时间了,但我似乎无法理解 编辑:到目前为止
Cars > Model1
Cars > Model1 > Accessories
Cars > Model1 > Something
Cars > Model2
Cars > Model3
我想递归地将其转换为多维数组,其中“Cars”是Model1、Model2和Model3的父元素
当然,“附件”和“某物”将是Model1的子元素
我已经试着找出这背后的逻辑很长一段时间了,但我似乎无法理解
编辑:到目前为止,我所拥有的并不多。如前所述,我似乎无法理解如何开发此功能背后的逻辑
$array = array(
'Cars > Model1',
'Cars > Model1 > Accessories',
'Cars > Model1 > Something',
'Cars > Model2',
'Cars > Model3'
);
for ($i = 0; $i < count($array); $i++) {
$name = explode('>', $array[$i]);
// somehow check if the current "name" is already pushed to a new array - if it is, then add as a child.
}
$array=array(
“汽车>车型1”,
“汽车>车型1>附件”,
“汽车>模型1>什么”,
“汽车>车型2”,
'汽车>车型3'
);
对于($i=0;$i',$array[$i]);
//以某种方式检查当前“名称”是否已推送到新数组中-如果是,则作为子数组添加。
}
以下是实现这一目标的方法
$array_data = array(
'Cars > Model1',
'Cars > Model1 > Accessories',
'Cars > Model1 > Something',
'Cars > Model2',
'Cars > Model3'
);
$last_key = null;
$array = [];
$result = [];
foreach($array_data as $key => $values)
{
$data = explode('>', $values);
if(is_array($data))
{
$count = 0;
$pop = array_pop($data);
foreach($data as $k => $v)
{
if($count == 1)
{
unset( $result[$last_key] );
$result[$last_key][$v] = $pop;
$count++;
continue;
}
$last_key = $v;
$result[$v] = $pop;
$count++;
}
$array[] = $result;
}
}
结果会是
echo '<pre>';print_r( $array );
Array
(
[0] => Array
(
[Cars ] => Model1
)
[1] => Array
(
[Cars ] => Array
(
[ Model1 ] => Accessories
)
)
[2] => Array
(
[Cars ] => Array
(
[ Model1 ] => Something
)
)
[3] => Array
(
[Cars ] => Model2
)
[4] => Array
(
[Cars ] => Model3
)
)
echo';打印(数组);
排列
(
[0]=>阵列
(
[汽车]=>车型1
)
[1] =>阵列
(
[汽车]=>阵列
(
[Model1]=>附件
)
)
[2] =>阵列
(
[汽车]=>阵列
(
[Model1]=>什么
)
)
[3] =>阵列
(
[汽车]=>车型2
)
[4] =>阵列
(
[汽车]=>车型3
)
)
以下是实现这一目标的方法
$array_data = array(
'Cars > Model1',
'Cars > Model1 > Accessories',
'Cars > Model1 > Something',
'Cars > Model2',
'Cars > Model3'
);
$last_key = null;
$array = [];
$result = [];
foreach($array_data as $key => $values)
{
$data = explode('>', $values);
if(is_array($data))
{
$count = 0;
$pop = array_pop($data);
foreach($data as $k => $v)
{
if($count == 1)
{
unset( $result[$last_key] );
$result[$last_key][$v] = $pop;
$count++;
continue;
}
$last_key = $v;
$result[$v] = $pop;
$count++;
}
$array[] = $result;
}
}
结果会是
echo '<pre>';print_r( $array );
Array
(
[0] => Array
(
[Cars ] => Model1
)
[1] => Array
(
[Cars ] => Array
(
[ Model1 ] => Accessories
)
)
[2] => Array
(
[Cars ] => Array
(
[ Model1 ] => Something
)
)
[3] => Array
(
[Cars ] => Model2
)
[4] => Array
(
[Cars ] => Model3
)
)
echo';打印(数组);
排列
(
[0]=>阵列
(
[汽车]=>车型1
)
[1] =>阵列
(
[汽车]=>阵列
(
[Model1]=>附件
)
)
[2] =>阵列
(
[汽车]=>阵列
(
[Model1]=>什么
)
)
[3] =>阵列
(
[汽车]=>车型2
)
[4] =>阵列
(
[汽车]=>车型3
)
)
我尝试分解“>”并循环分解的字符串,将其推入$newArray。但是在每次迭代中,我需要检查这个特定的名称是否已经在$newArray中,因为这样我们就不会添加到它中了。可能是我迄今为止添加的一小段代码的重复@MateiMihai,我不认为这个解决方案能解决我的问题。我需要“Cars”作为唯一的键,并将不同的“Models”作为多维数组添加到它下面。@dtn如果有帮助,请检查我的答案。.我尝试分解“>”并循环分解的字符串以将其推入$newArray。但是在每次迭代中,我需要检查这个特定的名称是否已经在$newArray中,因为这样我们就不会添加到它中了。可能是我迄今为止添加的一小段代码的重复@MateiMihai,我不认为这个解决方案能解决我的问题。我需要“Cars”作为唯一的键,并将不同的“Models”作为多维数组添加到它下面。@dtn如果有帮助,请检查我的答案。。