請問回呼函數有關問題

來源:互聯網
上載者:User
請教回呼函數問題
各位好,我是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是函數的形參。
回呼函數的傳回值對於調用該函數的函數起到排序的規則作用(就是說你需要排序函數以怎樣的規則進行排序)

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.