PHP将单维数组转换为嵌套数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP将单维数组转换为嵌套数组相关的知识,希望对你有一定的参考价值。

如何在php中将'N'个元素的单维数组转换为'N'级嵌套数组?

例:

输入:

$input = array('Orange','Apple','Banana');

预期产出:

$output = array(
    'name' => 'Banana',
    'sub_category' => array(
         'name' => 'Apple',
         'sub_category' => array(
             'name' => 'Orange'
);

这是我的代码:

  $categories = array('Orange','Apple','Banana');
  $count = count($categories);
  for($i=0;$i<=$count;$i++){
    if(isset($categories[$i+1])){
      $parent = $categories[$i+1]; // parent      
        $categories[$i+1]=array(
          'name' => $categories[$i+1],
          'sub_category' => array('name' => $categories[$i])
        );
    }   
  }
  $categories = $categories[$count-1];
  var_dump($categories);

我的代码很草率,我也得到以下不正确的输出:

$output = array(
    'name' => 'Banana',
    'sub_category' => array(
       'name' => array(  
         'name' => 'Apple',
         'sub_category' => array(
             'name' => 'Orange'
       );
);

编辑1:

问题/解决方案提供here似乎没有回答我的问题。

答案

您可以使用简单的递归技术:

function toNestedArray(array $input, array $result = [])
{
    $result = ['name' => array_pop($input)];
    if (count($input)) {
        $result['sub_category'] = toNestedArray($input, $result);
    }

    return $result;
}
另一答案
$categories = array('Orange','Apple','Banana');
  $count = count($categories);
  $categories2=array();
  for($i=$count-1;$i>0;$i--){
      if($i-2>-1){

          $categories2=array(
          'name'=>$categories[$i],
          'sub_category'=>array('name'=>$categories[$i-1],'sub_categories'=>array('name'=>$categories[$i-2]))
          ); 
      }
  }
  echo "<pre>";
  print_r($categories2);
  echo "</pre>";
另一答案

一个简单的选择是循环$input数组,从内到外构建$output数组。

$output = array();
foreach ($input as $name) {
    if (empty($output)) {
        $output = array("name" => $name);
    } else {
        $output = array("name" => $name, "sub_category" => $output);
    }
}

以上是关于PHP将单维数组转换为嵌套数组的主要内容,如果未能解决你的问题,请参考以下文章

将单元素数组的数组转换为一维数组

将 3 维指针的第一个地址转换为单维指针有问题吗?

PHP在连接键时将嵌套数组转换为单个数组?

将嵌套数组转换为嵌套 html 块的递归 php 函数

PHP:将字符串转换为嵌套数组

连接两个单维列表以获得一个多维列表