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

が、コールバックがやろうとしていることは何でも。

関連する問題