我想将一个函数应用于一个对象的每个元素/ prop,但似乎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'。
我该如何解决这个问题?
答案 0 :(得分:1)
它实际上为True
返回array_walk_recursive
的值。如果查看函数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这样的数组,但是无论回调应该做什么。