2011-10-26 174 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,但無論回調是應該做什麼的。