2011-10-19 8 views
13

개체 배열 (아래 참조)이 있는데 동일한 배열을 반환하지만 조건을 충족하는 "개체 (들)"를 반환하는 함수를 작성하려고합니다.개체 배열 필터링 방법?

함수 것이다 : 만약 존재한다면, 인덱스가 2- 존재

1- 선택하면, 필요한 값과 객체의 인덱스가 그 값과 같은 경우 검사는 전체 객체를 제거한다. 예를 들어

:

Array 
(
    [course] => Array 
     (
      [0] => stdClass Object 
       (
        [name] => Programmation Web 
        [description] => 
        [public] => 0 
        [requests] => 0 
        [id] => 245 
        [members] => Array 
         (
          [0] => stdClass Object 
           (
            [id] => 11 
            [name] => Robert Smith 
           ) 

         ) 

        [projects] => Array 
         (
          [0] => stdClass Object 
           (
            [id] => 1923 
            [title] => Sans titre (1) 
            [type] => portfolio 
           ) 

          ) 

        [project_count] => 1 
        [admins] => Array 
         (
          [0] => stdClass Object 
           (
            [member] => 11 
            [firstname] => Robert 
            [lastname] => Smith 
           ) 

         ) 

        [topic_name] => Le PHP 
        [activites] => Array 
         (
          [0] => stdClass Object 
           (
            [topic_name] => 
            [topic_id] => 42 
            [post_parent] => 107 
            [post_body] => Oui moi aussi je me demande ça. 
            [post_id] => 109 
           ) 

         ) 

        [forums] => Array 
         (
          [0] => stdClass Object 
           (
            [forum_name] => Discussion générale 
            [forum_id] => 101 
           ) 

         ) 

       ) 

      [1] => stdClass Object 
       (
        [name] => Les bases de données 
        [description] => 
        [public] => 0 
        [jointype] => controlled 
        [grouptype] => course 
        [membershiptype] => admin 
        [topic_name] => Difficulté 
        [activites] => Array 
         (
          [0] => stdClass Object 
           (
            [topic_name] => 
            [topic_id] => 44 
            [post_parent] => 111 
            [post_body] => Ouah! 
            [post_id] => 112 
           ) 

         ) 

        [forums] => Array 
         (
          [0] => stdClass Object 
           (
            [forum_name] => Le MySQL 
            [forum_id] => 103 
           ) 

         ) 

       ) 

     ) 

) 

admins-> 부재 값이 11과 동일 물체가있는 경우, 물체를 제거하고,이 오브젝트 않고 배열을 반환한다. 따라서 반환 된 배열은 다음과 같습니다.

 Array 
(
    [course] => Array 
     (
      [0] => stdClass Object 
       (
        [name] => Programmation Web 
        [description] => 
        [public] => 0 
        [requests] => 0 
        [id] => 245 
        [members] => Array 
         (
          [0] => stdClass Object 
           (
            [id] => 11 
            [name] => Robert Smith (smithrobert) 
           ) 

         ) 

        [projects] => Array 
         (
          [0] => stdClass Object 
           (
            [id] => 1923 
            [title] => Sans titre (1) 
            [type] => portfolio 
           ) 

          ) 

        [project_count] => 1 
        [admins] => Array 
         (
          [0] => stdClass Object 
           (
            [member] => 11 
            [firstname] => Robert 
            [lastname] => Smith 
           ) 

         ) 

        [topic_name] => Le PHP 
        [activites] => Array 
         (
          [0] => stdClass Object 
           (
            [topic_name] => 
            [topic_id] => 42 
            [post_parent] => 107 
            [post_body] => Oui moi aussi je me demande ça. 
            [post_id] => 109 
           ) 

         ) 

        [forums] => Array 
         (
          [0] => stdClass Object 
           (
            [forum_name] => Discussion générale 
            [forum_id] => 101 
           ) 

         ) 

       ) 

     ) 

) 

어떻게해야합니까?

+0

['array_filter'] (http://php.net/array_filter)를보십시오. –

+0

중복 (http://stackoverflow.com/questions/7814872/how-to-filter-out-an-object-from-an-array-of-objects) – SparrowG

답변

29

배열을 필터링하고 싶으십니까? array_filter을 사용하십시오!

$new_array = array_filter($array, function($obj){ 
    if (isset($obj->admins)) { 
     foreach ($obj->admins as $admin) { 
      if ($admin->member == 11) return false; 
     } 
    } 
    return true; 
}); 
+0

안녕하세요! 깔끔한 답변 주셔서 감사합니다! 작동하는 것으로 보이지만 작동하지 않는 것 같습니다 ... $ new_array는 콜백 함수를 통해 전달한 $ array와 같습니다. – Alex

+0

실제로 이상하게도, 그것은 나를 위해 일했습니다. 그리고 귀하의 데이터 구조를보고, 나는 왜 그것을 볼 수 없습니다 ... : S – netcoder

+0

배열 "인덱스"인덱스로 시작, 그 이유는 작동하지 않을까요? – Alex

3

사용자 지정 콜백 array_filter를 사용할 수 있습니다

function filter_callback($element) { 
    if (isset($element->foo) && $element->foo == 'some_value') { 
    return TRUE; 
    } 
    return FALSE; 
} 

$arr = array_filter($arr, 'filter_callback');