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()
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:Entscheidungcallback
Empfangenes Parameterformular
ARRAY_FILTER_USE_KEY
- Akzeptiert den Schlüsselnamen als einzigen Parametercallback
ARRAY_FILTER_USE_BOTH
- callback
Akzeptieren 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 array_map ( callable $callback
, array $array1
[, array $...
] )
array_map(): Gibt ein Array zurück, das auf jedes Element von array1
callback
Array nach Funktion. Die Anzahl der Funktionsparameter callback
und die Anzahl der an array_map() übergebenen Arrays müssen gleich sein.
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));
结果如下:
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返回值
说明: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!