这是数组。
$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等。
我写了这样的代码,但它不会工作。我也不知道原因。
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"
)
)发布于 2017-01-25 16:39:22
试试这个:)
$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();
}
}发布于 2017-01-25 15:51:54
我明白了!;)
<?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;
}
?>编辑(结果):
first
--1-1
--1-2
----1-3-4发布于 2017-01-25 15:53:27
<?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);我并没有把破折号当回事...这只是为了获得递归名称
输出为
--first
--1-1
--1-2
--1-3-4
[Finished in 0.0s]https://stackoverflow.com/questions/41845620
复制相似问题