首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数组转换为其他格式

如何将数组转换为其他格式
EN

Stack Overflow用户
提问于 2017-01-25 15:20:16
回答 5查看 68关注 0票数 0

这是数组。

代码语言:javascript
复制
$data = array(
"id"=>1,
"pid"=>0,
"name"=>'first',
"children"=>array(array(
  "id"=>2,
  "pid"=>1,
  "name"=>'1-1'
),array(
  "id"=>3,
  "pid"=>1,
  "name"=>'1-2',
  "childen" =>array(
    "id" => 4,
    "pid" =>3,
    "name" =>'1-3-4'
  )
)

) );

我希望数组的格式如下所示。

代码语言:javascript
复制
first
--1-1
--1-2
----1-3-4

等。

我写了这样的代码,但它不会工作。我也不知道原因。

代码语言:javascript
复制
function getTreeAsList($array, $result=array(), $space=0)
{
$space += 2;
foreach ($array as $k=>$v) {
    if (is_array($v)) {
        $result[] = str_repeat("--", $space)."get";
        getTreeAsList($v, $result, $space);
    }
}
return $result;
}
getTreeList($data);

请告诉我怎么做。谢谢。

补充道:@Jerry我按照你写的那样做了,它起作用了,但我脑海中还有另一个问题,那就是我如何才能获得这样的结果数组。

代码语言:javascript
复制
array(
  array(
    "id"=>1,
    "name"=>"first"
  ),
  array(
    "id"=>2,
    "name"=>"--1-1"
  ),
  array(
    "id"=>3,
    "name"=>"--1-2"
  ),
  array(
    "id"=>4,
    "name"=>"----1-3-4"
  )
)
EN

回答 5

Stack Overflow用户

发布于 2017-01-25 16:39:22

试试这个:)

代码语言:javascript
复制
$iterator = new RecursiveArrayIterator($data); 

iterator_apply($iterator, 'getTreeAsList', array($iterator)); 

function getTreeAsList($iterator, $space=0) { 

  while ( $iterator -> valid() ) { 
      if($iterator->key() === "name"){
        echo str_repeat('--', $space++) .$iterator["name"]."\n";
      }
      if ( $iterator -> hasChildren() ) { 
          getTreeAsList($iterator -> getChildren(), $space);   
      } 
      $iterator -> next(); 
  } 
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-25 15:51:54

我明白了!;)

代码语言:javascript
复制
<?php

$data = array(
"id"=>1,
"pid"=>0,
"name"=>'first',
"children"=>array(array(
  "id"=>2,
  "pid"=>1,
  "name"=>'1-1'
),array(
  "id"=>3,
  "pid"=>1,
  "name"=>'1-2',
  "childen" =>array(
    "id" => 4,
    "pid" =>3,
    "name" =>'1-3-4'
  )
)));

$result = parse($data);

print $result;

function parse($arr, $space = -1) {
    $result = "";
    foreach ($arr as $key => $value) {
        if (is_array($value)) {
            $result.= parse($value, $space + 1);
        } else if ($key == "name") {
            $result.= ($space > 0 ? str_repeat("--", $space) : "") . $value . "\r\n";
        }
    }
    return $result;
}

?>

编辑(结果):

代码语言:javascript
复制
first
--1-1
--1-2
----1-3-4
票数 0
EN

Stack Overflow用户

发布于 2017-01-25 15:53:27

代码语言:javascript
复制
<?php

$data = array(
"id"=>1,
"pid"=>0,
"name"=>'first',
"children"=>array(array(
  "id"=>2,
  "pid"=>1,
  "name"=>'1-1'
),array(
  "id"=>3,
  "pid"=>1,
  "name"=>'1-2',
  "children" =>array(
    "id" => 4,
    "pid" =>3,
    "name" =>'1-3-4'
  )
))
);


function getName($data)
{
    if (is_array($data)) {
        echo  "--".$data["name"]."\n";
        if (isset($data["children"])) {
            if (isset($data["children"][0])) {
                foreach ($data["children"] as $child) {
                    getName($child);
                }
            } else {
                getName($data["children"]);
            }
        }
    }
}
getName($data);

我并没有把破折号当回事...这只是为了获得递归名称

输出为

代码语言:javascript
复制
--first
--1-1
--1-2
--1-3-4
[Finished in 0.0s]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41845620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档