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

Php 如何将数组转换为其他格式,php,arrays,recursion,Php,Arrays,Recursion,这是数组 $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"

这是数组

$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'
  )
)
) );

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

first
--1-1
--1-2
----1-3-4
first
--1-1
--1-2
----1-3-4
等等

我这样写代码,但它不会工作。我不知道为什么

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我按照你写的那样做了,它成功了,但我脑子里还有另一个问题,那就是如何获得像这种格式的结果数组

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"
  )
)
我明白了!;)


请尝试下面的代码。我希望它能和你的要求一样

foreach ($data as $key => $value) 
  {
        if($key == 'name')
        {
            echo $value;    
        }
        if(is_array($value))
        {
            foreach ($value as $ckey => $cvalue) 
            {
                foreach ($cvalue as $ck => $cv) 
                {
                    if($ck == 'name')
                    {
                        echo '</br>';
                        echo '--'.$cv;  
                    }
                    if(is_array($cv))
                    {
                        foreach ($cv as $ckk => $cvv) 
                        {
                            if($ckk == 'name')
                            {
                                echo '</br>';
                                echo '----'.$cvv;
                            }
                        }
                    }
                }
            }
        }
  }
试试这个:)


您可以使用它来获取数组格式的值

<?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'
  )
)

) );

$glresult=array();
function getTreeAsList($array, $space='')
{
 global $glresult;

 foreach ($array as $k=>$v) 
 {
  if (is_array($v)) 
  {
   getTreeAsList($v, $space);
  }
  else if ($k =='name')
  {
   $glresult[] = $space.$v;
   $space .= '--';
  }
 }
return $glresult;
}

$result = getTreeAsList($data);

echo '<pre>'; print_r($result);

?>


您的代码固定在这组数据上,因此如果有其他子项,它将不起作用。您需要将结果作为普通字符串或数组?作为数组。我添加了将结果作为数组的答案谢谢。它帮助了我。我将深入挖掘有趣的代码:)
--first
--1-1
--1-2
--1-3-4
[Finished in 0.0s]
foreach ($data as $key => $value) 
  {
        if($key == 'name')
        {
            echo $value;    
        }
        if(is_array($value))
        {
            foreach ($value as $ckey => $cvalue) 
            {
                foreach ($cvalue as $ck => $cv) 
                {
                    if($ck == 'name')
                    {
                        echo '</br>';
                        echo '--'.$cv;  
                    }
                    if(is_array($cv))
                    {
                        foreach ($cv as $ckk => $cvv) 
                        {
                            if($ckk == 'name')
                            {
                                echo '</br>';
                                echo '----'.$cvv;
                            }
                        }
                    }
                }
            }
        }
  }
first
--1-1
--1-2
----1-3-4
$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(); 
  } 
}
<?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'
  )
)

) );

$glresult=array();
function getTreeAsList($array, $space='')
{
 global $glresult;

 foreach ($array as $k=>$v) 
 {
  if (is_array($v)) 
  {
   getTreeAsList($v, $space);
  }
  else if ($k =='name')
  {
   $glresult[] = $space.$v;
   $space .= '--';
  }
 }
return $glresult;
}

$result = getTreeAsList($data);

echo '<pre>'; print_r($result);

?>