2013-02-12 56 views
0

我想创建嵌套数组平板阵列,像这样的:嵌套数组持平PARENT_ID创建

[0]=>Array(
    "id"=>1, 
    "positions">Array(
    [0]=>Array(
     "id"=>2 
    ), 
    [1]=>Array(
     "id"=>3 
     "positions"=>Array(
     [0]=>Array(
     "id"=>4 
     ) 
    ) 
    ) 

是这样的:

[0]=>Array(
    "id"=>1, 
    "parent_id"=>0 
), 
[1]=>Array(
    "id"=>2, 
    "parent_id"=>1 
), 
[2]=>Array(
    "id"=>3, 
    "parent_id"=>1 
), 
[3]=>Array(
    "id"=>4, 
    "parent_id"=>3 
) 

我没有在PARENT_ID嵌套结构,所以所有的技巧都是通过嵌套数组“骑”,并根据父节点的id添加'parent_id'。我知道如何平整数组,但我需要parent_id信息。

+1

你的阵列是不正常的结构没有终点为某些阵列,加上完整的阵列 – 2013-02-12 12:40:30

回答

3

试试下面的代码:我希望对大家有用吧...

<?php 

$array = array(array(
    "id"=>1, 
    "positions" => 
    array(
     array(
     "id"=>2 
     ), 
     array(
      "id"=>3, 
      "positions"=> 
       array(
        array(
        "id"=>4 
       ) 
       ) 
     ) 
    ) 
)); 

echo "<pre>"; 
print_r(getArray($array)); 
echo "</pre>"; 
exit; 


function getArray($array,$parent_id = 0) 
{ 
    $result = array(); 
    foreach ($array as $value) 
    { 
     $tmp = array(); 
     $tmp['id'] = $value['id']; 
     $tmp['parent_id'] = $parent_id;   
     $result[] = $tmp; 
     if(!empty($value['positions'])) 
     { 
      $result= array_merge($result,getArray($value['positions'],$value['id'])); 
     } 

    } 

    return $result; 


} 

?> 

OUTPUT:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [parent_id] => 0 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [parent_id] => 1 
     ) 

    [2] => Array 
     (
      [id] => 3 
      [parent_id] => 1 
     ) 

    [3] => Array 
     (
      [id] => 4 
      [parent_id] => 3 
     ) 

) 
+0

+1快速回答 – 2013-02-12 12:58:29

1

使用此代码

$result = array(); 
function generateArray($array,$parent=0){ 
    foreach ($array as $key=>$val){ 
     $tmp = array(); 
     if(!empty($val['id'])){ 
      $tmp['id'] = $val['id']; 
      $tmp['parent_id'] = $parent; 
      $result[] = $tmp; 
     } 
     if(!empty($val['positions'])){ 
      $result=array_merge($result,generateArray($val['positions'],$val['id'])); 
     } 
    } 
    return $result; 
} 

你的数组必须是这种结构的

$data = array(0=>array("id"=>1,"positions"=>array(0=>array("id"=>2),1=>array("id"=>3,"positions"=>array(0=>array("id"=>4)))))); 

然后调用函数generateArray()

var_dump(generateArray($data)); 
+0

$ VAL [“身份证”]永远阵列,所以你的答案错误,请纠正它.... – Chintan 2013-02-12 13:34:51