Maison  >  Article  >  développement back-end  >  Fonctions et tableaux de rappel

Fonctions et tableaux de rappel

不言
不言original
2018-04-14 16:37:181842parcourir

Le contenu partagé avec vous dans cet article concerne les fonctions de rappel PHP et les tableaux, qui ont une certaine valeur de référence. Les amis dans le besoin peuvent se référer à

array_filter(), array_map(), comparaison d'utilisation. de array_reduce(), array_walk()

array_filterUtiliser la fonction de rappel pour filtrer les cellules du tableau

Description : tableau array_filter ( tableau $array [, appelable $callback [, int $flag = 0 ]] )

transmet tour à tour chaque valeur du tableau array à la fonction callback. Si la fonction callback renvoie vrai, la valeur actuelle du tableau array sera incluse dans le tableau de résultat renvoyé, sinon, aucune valeur ne sera renvoyée au tableau de résultat . Les noms de clés du tableau restent inchangés.

Description du paramètre :

tableau :Tableau à boucler

rappel :Fonction de rappel à utiliser

Si la fonction callback n'est pas fournie, toutes les valeurs équivalentes de array seront supprimées les entrées >FALSE.

drapeau:DécisioncallbackFormulaire des paramètres reçus

  • ARRAY_FILTER_USE_KEY - Accepte le nom de la clé comme seul paramètrecallback

  • ARRAY_FILTER_USE_BOTH - callbackAccepter à la fois le nom de la clé et la valeur de la clé

Valeur de retour : Renvoie le tableau filtré.

Exemple 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 )

Analyse : & est l'opération AND de PHP Lorsque la valeur du tableau est transmise, l'opération AND est effectuée selon la forme binaire et...0000 0001 (le nombre de 0 devant est lié au système d'exploitation. Si vous ne comprenez pas, vous pouvez compléter les connaissances de base). Si le résultat est vrai, la valeur transmise est renvoyée dans le tableau de résultats.

Exemple 2 : S'il n'y a pas de fonction de rappel, si la valeur dans le tableau est vraie, la valeur dans le tableau sera renvoyée dans le tableau résultat

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

Exemple 3 : S'il n'y a que des valeurs clés, alors la fonction de rappel peut recevoir une valeur clé. Si les deux paires clé-valeur sont incluses, le premier paramètre reçoit la valeur et le deuxième paramètre reçoit la valeur clé

$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() : Renvoie un tableau, qui est appliqué à chaque élément de array1 callbackTableau après fonction. Le nombre de paramètres de fonction callback et le nombre de tableaux transmis à array_map() doivent être les mêmes.

Description du paramètre :

rappel : Fonction de rappel, appliquée à chaque élément de chaque tableau.

array1 : tableau, parcourez et exécutez la fonction callback.

...数组列表,每个都遍历运行 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_reduceUtilisez la fonction de rappel pour réduire de manière itérative le tableau à une valeur unique

Description : mixte array_reduce ( array $array , appelable $callback [, mixte $initial = NULL ] )

array_reduce() applique la fonction de rappel callback de manière itérative à chaque élément du tableau array dans une cellule, réduisant ainsi le tableau à une seule valeur.

Paramètres :

tableau : Tableau d'entrée.

rappel : mixte rappel ( mixte $carry , mixte $item )

 carry : porte la valeur de la dernière itération ; si cette itération est la première fois, alors cette valeur est initial.

item : porte la valeur de cette itération.

initial : Si le paramètre facultatif initial est spécifié, ce paramètre sera utilisé avant le début du traitement, ou lorsque le traitement se termine et que le tableau est vide, le dernier résultat (c'est-à-dire lorsque le paramètre tableau est vide, initial comme valeur de retour de array_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 ( tableau &$array , appelable $callback [, mixte $userdata = NULL ] )

Appliquez la fonction définie par l'utilisateur funcname à chaque cellule du tableau array.

array_walk() ne sera pas affecté par le array pointeur de tableau interne. array_walk() parcourra l'ensemble du tableau quelle que soit la position du pointeur.

Description du paramètre :

tableau : Tableau d'entrée.

rappel : Généralement, callback accepte deux paramètres. array La valeur du paramètre est utilisée comme première et le nom de la clé est utilisé comme deuxième .

Remarque :

Si callback doit opérer directement sur les valeurs du tableau, spécifiez le premier paramètre à callback comme référence. Toute modification apportée à ces cellules modifiera également le tableau d'origine lui-même.

Remarque :

Le nombre de paramètres dépasse le nombre attendu. S'il est transmis à une fonction intégrée (telle que strtolower()), un avertissement sera émis, il ne peut donc pas être utilisé comme funcname. 🎜>.


Seule la valeur de array peut être modifiée, et l'utilisateur ne doit pas modifier la structure du tableau lui-même dans le rappel fonction. Par exemple, ajouter/supprimer des unités, supprimer des unités, etc. Si le tableau sur lequel array_walk() change, le comportement de cette fonction est indéfini et imprévisible.


userdata : Si le paramètre facultatif userdata est fourni, il sera passé au rappel en tant que troisième paramètre 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
 */


           

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn