2011-10-26 5 views
0

개체의 각 요소/소품에 기능을 적용하고 싶지만 array_walk_recursive() 개체에서 작동하지 않습니다. 예 :array_walk_recursive가 작동하지 않는 것 같습니다.

if($re = $con->query("SELECT id, created_date, contents FROM " . 
         POST_DATA . " WHERE type = 'news' ORDER BY ". 
         "created_date DESC LIMIT $amount")) { 
    if($re->num_rows != 0) { 
     while($ob = $re->fetch_object()) { 
      $ob = array_walk_recursive($ob, "_output"); 
      print_r($ob); 
      die(); 
     } 
    } 
} 

은 단순히 '1'을 반환합니다.

어떻게 해결할 수 있습니까?

답변

1

실제로는 array_walk_recursive에 대해 True의 값이 반환됩니다. 함수의 documentation을 보면이 메소드가 수행하는 작업은 객체의 각 항목과 키에 대해 _output 함수를 호출하는 것입니다.

또한이 비슷합니다 일부 코드를해야한다, 내가 상상하는 것, 그것이 제대로 작동하려면 얻을 수 있습니다 : 그것은 당신이 array_walk_recursive에 준 캐릭터 라인 화 된 이름이기 때문에 _output가 호출

function _output($data, $key) { 
    echo "For the key $key, I got the data: "; 
    print_r($data); 
} 

기능. 그러면 화면에 값이 인쇄됩니다.


편집는 :

내가 실제로 원래하지만 할 싶은 있었는지 대답 아니에요 것으로 보인다. 배열의 모든 요소에 함수를 적용하려면 array_map을 살펴 보시기 바랍니다. 당신은이 같은 array_map를 사용할 수 있습니다

function double($item) { 
    return 2 * $item; 
} 

array_map('double', $item); 

궁극적으로 재귀는 당신이 원하는 무언가가 있다면, 당신은 아마 같은 것을 할 수있다 : $ OBJ와 같은 다른 배열을 반환

function callback($key, $value) { 
    // do some stuff 
} 

function array_map_recursive($callback, $array) { 
    $new_array = array() 
    foreach($array as $key => $value) { 
     if (is_array($value)) { 
      $new_array[$key] = array_map_recursive($callback, $value); 
     } else { 
      $new_array[$key] = call_user_func($callback, $key, $value); 
     } 
    } 
    return $new_array; 
} 

array_map_recursive('callback', $obj); 

하지만, 콜백이해야 할 일이 무엇이든간에.

관련 문제