>  기사  >  백엔드 개발  >  콜백 함수 및 배열

콜백 함수 및 배열

不言
不言원래의
2018-04-14 16:37:181753검색

이 글에서 공유한 내용은 PHP 콜백 함수 및 배열에 관한 것입니다. 특정 참조 값이 있습니다. 필요한 친구는

array_filter(), array_map(), array_reduce(), array_walk() 사용법 비교를 참조할 수 있습니다.

array_filter콜백 함수를 사용하여 배열의 셀을 필터링하세요

설명: array array_filter ( array $배열$array [, callable $callback [, int $flag [, callable $callback

[, 🎜🎜🎜int🎜 $flag 🎜 = 0🎜🎜🎜 ]] )🎜🎜🎜

依次将 배열array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组中的每个值传递到 콜백 函数。如果 콜백
 函数返回 true,则 
배열
 数组的当前值会被包含는 返回的结果数组中,否则,将不返回任何值给结果数组。

数组的键name保留不变。

参数说明:
array
: ㅋㅋㅋ

 如果没有提供 콜백callback 函数, 将删除 array 中所有等值为 FALSE 的条目。

flag:决定callback接收的参数形式 

  • ARRAY_FILTER_USE_KEY - callback 函数, 将删除 배열

     中所有等值为 🎜FALSE🎜 적条目。🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜flag🎜:🎜决定🎜 콜백 🎜接收的参数形式 
    🎜🎜🎜🎜🎜🎜
    • 🎜ARRAY_FILTER_USE_KEY - 콜백接受键名 作为的唯一参数🎜🎜
    • ARRAY_FILTER_USE_BOTH - callback키 이름과 키 값을 모두 허용합니다. ​​

    반환 값: 필터링된 배열을 반환합니다.

    예 1:

    function odd($var){    return($var & 1);}function even($var){    
    return(!($var & 1));
    }
    $array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $array2 = array(6, 7, 8, 9, 10, 11, 12);echo "Odd :\n";print_r(array_filter($array1, "odd"));
    echo "<br />Even:\n";
    print_r(array_filter($array2, "even"));
    结果:Odd : Array ( [a] => 1 [c] => 3 [e] => 5 ) 
    Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )

    분석: &는 PHP의 AND 연산이며, 이진 형식에 따라 배열의 값이 전달되고...0000 0001( 앞에 0이 몇 개 있는지) 운영체제와 관련이 있습니다. 이해가 안 되시면 기본 지식을 채워넣고 AND 연산을 하여 결과가 true이면 전달된 값을 반환해 드립니다. 결과 배열.

    예제 2: 콜백 함수가 없는 경우 배열의 값이 true이면 배열의 값이 결과 배열로 반환됩니다.

    $entry = array(    0 => 'foo',    1 => false,    2 => -1,    3 => null,    4 => '');
    print_r(array_filter($entry));
    结果:Array ( [0] => foo [2] => -1 )

    예 3:키 값만 있는 경우 콜백 함수는 키 값을 받을 수 있습니다. 두 키-값 쌍이 모두 포함된 경우 첫 번째 매개변수는 값을 받고, 두 번째 매개변수는 키-값을 받습니다

    $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
    var_dump(array_filter($arr, function($k) {    
    return $k == 'b';}, ARRAY_FILTER_USE_KEY));
    var_dump(array_filter($arr, function($v, $k) {    
    return $k == 'b' || $v == 4;}, ARRAY_FILTER_USE_BOTH));
    结果:
    D:\studySoftware\wamp64\www\test.php:
    5:array (size=1)  'b' => int 2D:
    \studySoftware\wamp64\www\test.php:
    8:array (size=2)  'b' => int 2  'd' => int 4
    array_map — 为数组的每个元素应用回调函数

    说明:array array_map ( callable $callback , array $array1 [, array $... ] )

    array_map():返回数组,是为 배열1array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。

    参数说明:

    callback回调函数,应用到每个数组里的每个元素。

    array1数组,遍历运行 callback 每个元素应용 콜백函数之后的数组。 

    콜백🎜 给 🎜🎜🎜array_map()🎜🎜🎜 数组数weight,两者必须一样。🎜
    🎜🎜🎜参数说明:🎜🎜콜백 🎜:🎜回调函数,应用到每个数组里的每个元素。🎜🎜🎜array1🎜:🎜数组,遍历运行 🎜콜백🎜 函数。🎜🎜

    ...数组列表,每个都遍历运行 callback 函数。

    返回值:返回数组,包含 callback 函数处理之后 array1 的所有元素。

    例1:

    function cube($n){    
    return($n * $n * $n);
    }$a = array(1, 2, 3, 4, 5);
    $b = array_map("cube", $a);
    print_r($b);
    结果:
    Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )


    例2:如果几个数组的元素数量不一致:空元素(null)会扩展短那个数组,直到长度和最长的数组一样。

    function cube($n,$x){    
    echo "n的值:{$n},x的值:{$x}<br />";    
    return ($n + $x);}$a = array(1,2,3,4,5);
    $b = array(10,20);
    $c = array_map("cube",$a,$b);
    print_r($c);
    /*
    结果:
    n的值:
    1,x的值:10n的值:
    2,x的值:20n的值:
    3,x的值:n的值:
    4,x的值:n的值:
    5,x的值:Array ( [0] => 11 [1] => 22 [2] => 3 [3] => 4 [4] => 5 ) 
    */

    例3:此函数有个有趣的用法:传入 NULL 作为回调函数的名称,将创建多维数组(一个数组,内部包含数组。)

    $a = array(1, 2, 3);
    $b = array("one", "two", "three");
    $c = array("uno", "dos", "tres");
    $d = array_map(null, $a, $b, $c);
    echo "<pre class="brush:php;toolbar:false">";
    print_r($d);
    echo "
    ";

    结果如下:


    例4:如果仅传入一个数组,键(key)会保留;传入多个数组,键(key)是整型数字的序列。

    $arr = array("stringkey" => "value");
    function cb1($a) {    
    return array ($a);
    }function cb2($a, $b) {    
    return array ($a, $b);
    }var_dump(array_map("cb1", $arr));
    var_dump(array_map("cb2", $arr, $arr));
    var_dump(array_map(null,  $arr));
    var_dump(array_map(null, $arr, $arr));

    结果如下:

    array_reduce콜백 함수를 사용하여 반복적으로 배열을 단일 값으로 줄입니다.

    Description: mixed array_reduce ( 배열 $array$array , callable $callback [, mixed $initial = NULL , callable $callback

    🎜 [, 🎜🎜🎜mixed🎜 $initial 코드 ><span class="initializer" style="color:#993366;"> = <strong style="font-weight:bolder;font-style:normal;"><code style="font-style:normal; 글꼴 -variant:normal;font-weight:400;font-family:'Fira Mono', 'Source Code Pro', monospace;color:rgb(153,51,102);margin:0px;">NULL🎜 🎜 🎜🎜 ] )🎜🎜

    array_reduce()콜백callback 迭代地作用到 array배열을 배열의 각 셀에 배치하여 배열을 단일 값으로 줄입니다.

    매개변수:

    array: 입력 배열.

    🎜

    callbackmixed callback ( mixed $carry$carry , mixed $item )

           carry:携带上次迭代里的值; 如果本次迭代是第一次,那么这个值是 initial ,
    mixed
    $item

    )🎜🎜🎜🎜🎜🎜 🎜carry: 🎜마지막 반복의 값을 전달합니다. 이 반복이 처음인 경우 이 값은 🎜초기🎜. 🎜🎜🎜🎜🎜🎜

    item: 이 반복의 가치를 전달합니다.

    initial: 선택적 매개변수 initial가 지정된 경우 이 매개변수는 처리가 시작되기 전이나 처리가 끝나고 마지막 결과에 대해 배열이 비어 있을 때(즉, array 매개변수가 비어 있으면 initialarray_reduce())의 반환 값으로 사용됩니다.

    官网例子:

    function sum($carry, $item){    
    $carry += $item;    
    return $carry;
    }
    function product($carry, $item){    
    $carry *= $item;    
    return $carry;
    }
    $a = array(1, 2, 3, 4, 5);
    $x = array();
    var_dump(array_reduce($a, "sum")); 
    // int(15)var_dump(array_reduce($a, "product", 10)); 
    // int(1200), because: 10*1*2*3*4*5var_dump(array_reduce($x, "sum", "No data to reduce")); 
    // string(17) "No data to reduce"

    这里讨论array为空的情况:

    function sum($carry, $item){    
    echo "如果这里执行了,就打印...";    
    return $carry;}$x = array();
    print_r(array_reduce($x, "sum",array("a","b")));
    //结果:
    Array ( [0] => a [1] => b )

    可以看出,当数组为空的时候,回调函数根本就没有执行,而是把initial作为array_reduce返回值


    array_walk — 使用用户自定义函数对数组中的每个元素做回调处理

    说明:bool array_walk ( array &$array&$array , callable $callback [, mixed $userdata = NULL ] )

    将用户自定义函数 funcname 应用到 array , 
    callable
     $callback

    🎜 [, 🎜🎜🎜mixed🎜 $userdata = NULL🎜🎜🎜 ] )🎜🎜🎜

    🎜🎜将사용户자정义函数 🎜funcname🎜 应용到 🎜배열🎜 数组中的每个单元。🎜🎜🎜🎜🎜

    array_walk()array 내부 배열 포인터의 영향을 받지 않습니다. array_walk()는 포인터의 위치에 관계없이 전체 배열을 탐색합니다.

    매개변수 설명:

    array: 입력 배열.

    callback: 일반적으로 콜백callback 接受两个参数。array 参数的值作为第一个,键名作为第二个

    Note:

    如果 callback 需要直接作用于数组中的值,则给 callback은 두 개의 매개변수를 허용합니다.

    <span style="color:#FF0000;"> 배열의 값</span>

    매개변수가 첫 번째로 사용되고, 키 이름이 두 번째로 사용됩니다.

    🎜🎜🎜🎜Note🎜:🎜

    콜백은 배열의 값에 대해 직접 작동해야 하며, 콜백 의 첫 번째 매개변수는 참조로 지정됩니다. 이러한 셀을 변경하면 원래 배열 자체도 변경됩니다. 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜참고🎜:🎜

    매개변수 수가 예상보다 많은 경우 내장 함수(예: strtolower())에 전달하면 경고가 발생하므로 funcname. funcname


    只有 array배열 값만 변경할 수 있으며, 콜백 함수에서 배열 자체의 구조를 변경하면 안 됩니다. 예를 들어 단위 추가/삭제, 단위 설정 해제 등이 있습니다.

    array_walk()
    가 변경되는 배열이 변경되면 이 함수의 동작은 정의되지 않고 예측할 수 없습니다.

    🎜🎜🎜🎜🎜🎜

    userdata: 선택적 매개변수가 제공되는 경우 사용자 데이터userdata,将被作为第三个参数传递给 callback funcname는 세 번째 매개변수 funcname.


    🎜

    返回值:成功时返回 TRUE, 或者在失败时返回 FALSE


    例子:

    $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana");
    function test_alter(&$item1, $key, $prefix){    
    echo "$item1=$key=$prefix<br/>";   
    $item1 = "$prefix: $item1";
    }function test_print($item2, $key){   
     echo "$key. $item2<br />\n";}echo "Before ...:<br />";
     array_walk($fruits, 'test_print');array_walk($fruits, 'test_alter', 'fruit');echo "... and after:<br />";
     array_walk($fruits, 'test_print');
     /*
     Before ...:
     d. lemona. orange
     b. bananalemon=d=fruitorange=a=fruitbanana=b=fruit... and after:
     d. fruit: 
     lemona. fruit: 
     orangeb. fruit: 
     banana
     */


               

위 내용은 콜백 함수 및 배열의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.