Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串分解递归创建多维数组_Php_Arrays_Recursion_Multidimensional Array - Fatal编程技术网

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如果有帮助,请检查我的答案。。