2012-06-22 3 views
1

안녕하세요, 저는 객체를 호출 중이고 일부 객체는 다른 객체를 포함하고 있습니다. foreach를 사용하여 각 속성을 통해 새 배열에 넣고 if 문 내부에 foreach 내부에 다른 객체가 들어 있는지 확인하고 또 다른 foreach를 사용하여 객체 속성 내에서 객체의 속성을 가져 오는 지 확인합니다.PHP에서 객체를 가로 지르려고하는 중

문제는 일단 깊이가 2 레벨로 떨어지면 객체가 떨어져 있다는 것을 알 수 있습니다. is_object 테스트를 수행하여 true를 반환하지만 travesere 속성을 사용하려고하면 그 중 일부 정보가 표시되지 않습니다. 그것.

private static function prepare_page($output_object) { 
    foreach ($output_object as $object) { 

    if (is_a($object, "subjects")) { 
     $return_object["{{::SUBJECT::}}"] = $object->name; 
    } 

    if (is_a($object, "posts")) { 
     $return_object["{{::POST::}}"] = $object->name; 

     foreach ($object as $atribute => $value) { 

      if (is_object($value) || is_array($value)) { 

       foreach ($object as $property => $val) { 

        if (is_object($val)) { 

         echo "It's an object inside an object"; 
          dump($val); 
          //works till here lets me know its an object and shows the $val with its contents (objects) 

          foreach ($val as $ob => $at) { 
           //breaks down here if i dump the $ob or $at it doesn't do anything  
           if (!is_object($at)) { 
            $return_object["{{::>>".strtoupper($ob)."::}}"] = $at; 
           } else { 
            // repeat process 
           } 
          } 
        } else { 
         $return_object["{{::==".strtoupper($property)."::}}"] = $val; 
        } 

       } 
      } else { 
       if (!is_object($value) && !is_array($value)) { 
        $return_object["{{::".strtoupper($atribute)."::}}"] = $value; 
       } 
      } 
     } 
    } 
} 
return $return_object; 
} 

미리 도움을 청하십시오.

+0

방법을 가리킬 수 있습니까? 이렇게 :'$ object-> method'. 'foreach' 결과 내에서'$ value-> attribute'처럼 사용할 수도 있습니다. IMO는 중첩 된'foreach'는 당신이 필요로하는 객체 나 메소드를 가리킬 수있을 때 나쁜 생각입니다. :) – Kebman

답변

1

글쎄, 내가 틀렸을 수도 있지만, 여기 문제는 당신이 어떻게 객체를 다루는 지 믿습니다.

is_object()는 객체가 배열이 아닌 객체 인 경우 true를 반환합니다. foreach 루프는 배열에서는 작동하지만 객체에서는 작동하지 않습니다.

작동 시키려면 먼저 개체를 배열로 변환해야합니다.

왜 시도하고이하지 않는다 :

콜이 같은 배열로 변환하는 기능,

foreach ($val as $ob => $at) { 

전 :

$val = object_to_array($val); 
foreach ($val as $ob => $at) { 

그리고이 선언 코드의 어딘가에서, 모든 루프 구조 외부에서 작동합니다. 기능은 위에 올라갑니다 :

function object_to_array($object) { 
    $array = array(); 
    if (is_object($object)) { 
     $array = get_object_vars($object); 
    } 
    return $array; 
} 

희망을 도왔습니다. =)

+0

글쎄, 이제는 두 번째 생각을했는데, 아마도 foreach가 객체를 가지고 작업을했기 때문에, 나는 잘 모르겠다. 당신은 베 지닝에서 함수를 바로 적용하여 전체 객체를 배열로 변환 할 수있다. 아마 더 쉽게 작업 할 수있을 것입니다. – Vinas

+1

foreach dos는 객체로 작업합니다. 따라서 함수 내부의 객체를 처음 반복합니다. 하지만 나는 적어도 당신에게 대답에 대한 투표를 해주었습니다. 다른 비슷한 질문을하기 위해이 사이트를 확인해 보았습니다. 그리고 이것은 거의 2 일 동안 저를 괴롭 혔습니다.하지만 계속 시도하고 계속 게시 할 것입니다. 알아 내라. – Moshe

관련 문제