Maison > Article > développement back-end > Fonctions et tableaux de rappel
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()
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écisioncallback
Formulaire des paramètres reçus
ARRAY_FILTER_USE_KEY
- Accepte le nom de la clé comme seul paramètrecallback
ARRAY_FILTER_USE_BOTH
- callback
Accepter à 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 array_map ( callable $callback
, array $array1
[, array $...
] )
array_map() : Renvoie un tableau, qui est appliqué à chaque élément de array1
callback
Tableau 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));
结果如下:
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返回值
说明: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!