Heim  >  Artikel  >  Backend-Entwicklung  >  请问回调函数有关问题

请问回调函数有关问题

WBOY
WBOYOriginal
2016-06-13 13:12:59733Durchsuche

请教回调函数问题
各位好,我是PHP初学者,在看PHP数组视频时,说到了回调函数,但不是很理解。

各位高手能解释下吗?

function dump($arr){
  echo "

";<br>                 print_r($arr);<br>         }         <br>         $arr1 = array("url"=>"bbs.houdunwang.com","name"=>"后盾网");<br>         $arr2 = array("url2"=>"bbs.houdunwang.com","name"=>"后盾网");<br>         $arr3 = array("weburl111"=>"bbs.houdunwang.com");<br>         $arr0 = array_intersect_uassoc($arr1,$arr2,a);<br>         function a($k1,$k2){<br>                 if($k1 === $k2){<br>                         return 0;<br>                 }elseif( $k1>$k2){<br>                         return 1;<br>                 }else{<br>                         return -1;<br>                 }        }<br>         dump($arr0);<br><br>在此代码中$k1 $k2代表的事什么意思?回调函数返回值0 1 -1 返回到数组判断中起到怎样的作用??<br><br><font color="#e78608">------解决方案--------------------</font><br>排序算法其实可以抽象成两部分:<br>1. 排序算法自身, 也就是元素以怎样的顺序比较<br>2. 比较规则, 就是给你两个元素, 你要告诉我谁大谁小..<br><br>通常的排序, 是对于数值型的直接比较, 因此, 直接用大于小于比较即可.<br><br>uassoc族函数提供的是一种自定义大小比较规则.<br>这类函数实现的是排序算法的第一部分, 把第二部分抽象成一个过程, 给你两个元素, 你告诉我谁大谁小即可.<br><br>对于你给出的例子, a函数接收到的两个参数即为用来比较的两个元素.<br><br>此类回调的基本实现如下:<br>(例子场景: 求数组值最大的元素)<br>
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
}
<br><font color="#e78608">------解决方案--------------------</font><br>简单点理解吧 回调函数就是自己写的函数 一般自己不直接调用,给其他函数调用...有点绕口吧<br><br>比如PHP的函数 call_user_func_array<br><br>可以在手册里看到例子<br><?php <br />function foobar($arg, $arg2) {<br>   echo __FUNCTION__, " got $arg and $arg2\n";<br>}<br>class foo {<br>   function bar($arg, $arg2) {<br>       echo __METHOD__, " got $arg and $arg2\n";<br>   }<br>}<br><br><br>// Call the foobar() function with 2 arguments<br>call_user_func_array("foobar", array("one", "two"));<br><br>// Call the $foo->bar() method with 2 arguments<br>$foo = new foo;<br>call_user_func_array(array($foo, "bar"), array("three", "four"));<br>?>
<br><font color="#e78608">------解决方案--------------------</font><br>回调函数是通过函数指针调用的函数,就是说,回调函数是作为一个参数被另外一个函数调用的。<br><br><br>//在此代码中$k1 $k2代表的事什么意思?回调函数返回值0 1 -1 返回到数组判断中起到怎样的作用??<br>对你的代码,a()函数就是回调函数,返回的两个值大小关系。<br>$k1,$k2是函数的形参。<br>回调函数的返回值对于调用该函数的函数起到排序的规则作用(就是说你需要排序函数以怎样的规则进行排序)<br><br> <div class="clear">
                 
              
              
        
            </div>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn