請教回呼函數問題
各位好,我是PHP初學者,在看PHP數組視頻時,說到了回呼函數,但不是很理解。
各位高手能解釋下嗎?
function dump($arr){
echo "
";
print_r($arr);
}
$arr1 = array("url"=>"bbs.houdunwang.com","name"=>"後盾網");
$arr2 = array("url2"=>"bbs.houdunwang.com","name"=>"後盾網");
$arr3 = array("weburl111"=>"bbs.houdunwang.com");
$arr0 = array_intersect_uassoc($arr1,$arr2,a);
function a($k1,$k2){
if($k1 === $k2){
return 0;
}elseif( $k1>$k2){
return 1;
}else{
return -1;
} }
dump($arr0);
在此代碼中$k1 $k2代表的事什麼意思?回呼函數傳回值0 1 -1 返回到數組判斷中起到怎樣的作用??
------解決方案--------------------
排序演算法其實可以抽象成兩部分:
1. 排序演算法自身, 也就是元素以怎樣的順序比較
2. 比較規則, 就是給你兩個元素, 你要告訴我誰大誰小..
通常的排序, 是對於數值型的直接比較, 因此, 直接用大於小於比較即可.
uassoc族函數提供的是一種自訂大小比較規則.
這類函數實現的是排序演算法的第一部分, 把第二部分抽象成一個過程, 給你兩個元素, 你告訴我誰大誰小即可.
對於你給出的例子, a函數接收到的兩個參數即為用來比較的兩個元素.
此類回調的基本實現如下:
(例子情境: 求數組值最大的元素)
PHP code
function ud_max($array, $callback) { if(empty($array)) return false; $max = next($array); foreach($array as $element) $max = $callback($max, $element); return $max;}function ud_compare1($max, $ele) { return ($max * $max > $ele * $ele) ? $max : $ele;}function ud_compare2($max, $ele) { return sqrt($max) > sqrt($ele) ? $max : $ele; //開方函數名我不確定是不是sqrt}
------解決方案--------------------
簡單點理解吧 回呼函數就是自己寫的函數 一般自己不直接調用,給其他函數調用...有點繞口吧
比如PHP的函數 call_user_func_array
可以在手冊裡看到例子
function foobar($arg, $arg2) {
echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " got $arg and $arg2\n";
}
}
// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two"));
// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>
------解決方案--------------------
回呼函數是通過函數指標調用的函數,就是說,回呼函數是作為一個參數被另外一個函數調用的。
//在此代碼中$k1 $k2代表的事什麼意思?回呼函數傳回值0 1 -1 返回到數組判斷中起到怎樣的作用??
對你的代碼,a()函數就是回呼函數,返回的兩個值大小關係。
$k1,$k2是函數的形參。
回呼函數的傳回值對於調用該函數的函數起到排序的規則作用(就是說你需要排序函數以怎樣的規則進行排序)