Heim >Backend-Entwicklung >PHP-Tutorial >Rückruffunktionen und Arrays

Rückruffunktionen und Arrays

不言
不言Original
2018-04-14 16:37:181877Durchsuche

Der in diesem Artikel mit Ihnen geteilte Inhalt befasst sich mit PHP-Rückruffunktionen und -Arrays, die einen bestimmten Referenzwert haben. Freunde in Not können sich auf

array_filter(), array_map() und den Verwendungsvergleich beziehen von array_reduce(), array_walk()

array_filterRückruffunktion verwenden, um die Zellen im Array zu filtern

Beschreibung: array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

übergibt jeden Wert im Array array der Reihe nach an die Funktion callback. Wenn die Funktion callback „true“ zurückgibt, wird der aktuelle Wert des Arrays array in das zurückgegebene Ergebnisarray aufgenommen, andernfalls wird kein Wert an das Ergebnisarray zurückgegeben . Die Schlüsselnamen des Arrays bleiben unverändert.

Parameterbeschreibung:

Array:Array zur Schleife

Rückruf:Zu verwendende Rückruffunktion

Wenn die Funktion callback nicht bereitgestellt wird, werden alle äquivalenten Werte von array werden gelöscht >FALSE Einträge.

Flagge:EntscheidungcallbackEmpfangenes Parameterformular

  • ARRAY_FILTER_USE_KEY - Akzeptiert den Schlüsselnamen als einzigen Parametercallback

  • ARRAY_FILTER_USE_BOTH - callbackAkzeptieren Sie sowohl den Schlüsselnamen als auch den Schlüsselwert

Rückgabewert: Gibt das gefilterte Array zurück.

Beispiel 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: & ist die UND-Operation von PHP. Wenn der Wert im Array übergeben wird, wird die UND-Operation gemäß der Binärform ausgeführt und ... 0000 0001 (die Anzahl der Nullen vorne hängt vom Betriebssystem ab. Wenn Wenn das Ergebnis wahr ist, wird der übergebene Wert an das Ergebnisarray zurückgegeben.

Beispiel 2: Wenn keine Rückruffunktion vorhanden ist und der Wert im Array wahr ist, wird der Wert im Array an das Ergebnisarray zurückgegeben

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

Beispiel 3: Wenn nur Schlüsselwerte vorhanden sind, kann die Callback-Funktion einen Schlüsselwert empfangen. Wenn beide Schlüssel-Wert-Paare enthalten sind, erhält der erste Parameter den Wert und der zweite Parameter den Schlüsselwert

$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(): Gibt ein Array zurück, das auf jedes Element von array1 callbackArray nach Funktion. Die Anzahl der Funktionsparameter callback und die Anzahl der an array_map() übergebenen Arrays müssen gleich sein.

Parameterbeschreibung:

Rückruf: Rückruffunktion, angewendet auf jedes Element in jedem Array.

array1: Array, durchlaufen und die Funktion callback ausführen.

...数组列表,每个都遍历运行 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_reduceVerwenden Sie die Callback-Funktion, um das Array iterativ auf einen einzelnen Wert zu reduzieren

Beschreibung: gemischt array_reduce ( array $array , aufrufbar $callback [, gemischt $initial = NULL ] )

array_reduce() wendet die Rückruffunktion callback iterativ auf jedes Element im Array array an in einer Zelle, wodurch das Array auf einen einzelnen Wert reduziert wird.

Parameter:

Array: Eingabearray.

Rückruf: gemischt Rückruf ( gemischt $carry , gemischt $item )

 carry: trägt den Wert in der letzten Iteration; wenn diese Iteration das erste Mal ist, dann ist dieser Wert initial.

item: trägt den Wert dieser Iteration.

initial: Wenn der optionale Parameter initial angegeben ist, Dieser Parameter wird verwendet, bevor die Verarbeitung beginnt oder wenn die Verarbeitung endet und das Array leer ist, das letzte Ergebnis (d. h., wenn der Parameter array leer ist, initial als Rückgabewert von 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 ( Array &$array , aufrufbar $callback [, gemischt $userdata = NULL ] )

Wenden Sie die benutzerdefinierte Funktion funcname auf jede Zelle im Array array an.

array_walk() wird vom array internen Array-Zeiger nicht beeinflusst. array_walk() durchläuft das gesamte Array unabhängig von der Position des Zeigers.

Parameterbeschreibung:

Array: Eingabearray.

Rückruf: Normalerweise akzeptiert callback zwei Parameter. array Der -Wert des Parameters wird als erster verwendet und der Schlüsselname wird als zweiter verwendet.

Hinweis:

Wenn callback direkt auf die Werte im Array einwirken muss, geben Sie den ersten Parameter für callback als Referenz an. Alle Änderungen an diesen Zellen verändern auch das ursprüngliche Array selbst.

Hinweis:

Die Anzahl der Parameter übersteigt die erwartete Anzahl (z. B. strtolower()), es wird eine Warnung ausgegeben, sodass sie nicht für die Verwendung als . funcname


Nur ​​der Wert von array kann geändert werden, und der Benutzer sollte die Struktur des Arrays selbst im Rückruf nicht ändern Funktion. Zum Beispiel Einheiten hinzufügen/löschen, Einheiten deaktivieren usw. Wenn sich das Array, auf dem sich array_walk() befindet, ändert, ist das Verhalten dieser Funktion undefiniert und unvorhersehbar.


Benutzerdaten: Wenn der optionale Parameter userdata angegeben wird, wird er als dritter Parameter funcname an den Callback übergeben .


返回值:成功时返回 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
 */


           

Das obige ist der detaillierte Inhalt vonRückruffunktionen und Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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