2013-02-12 3 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

배열이 제대로 일부 배열의 끝이없는 구조, 신속한 답변 –

답변

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; 


} 

?> 

출력 :

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을 추가 할 것입니다, 그래서 당신의 대답을 잘못 수정하십시오 .... –

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

$ 발 [ 'ID'] 결코 배열의 전체 배열 – Chintan