2011-10-26 125 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为每个项目和键入对象。

你也应该有一些代码,类似于此,我会想象,得到它的正常工作:

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

_output叫,因为这是你在array_walk_recursive给字符串化的名称功能。这应该将您的值打印到屏幕上。


编辑

看来,我不是真正回答你最初想要做什么,虽然。如果你想将一个函数应用到数组的每个元素,我建议你看看array_map。您可以使用array_map这样的:

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

array_map('double', $item); 

最后,如果递归是你想要的东西,你大概可以做这样的事情:

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); 

这将返回另一个数组,比如$ OBJ,但无论回调是应该做什么的。