2015-01-22 1 views
6

Ich möchte nur array_walk() mit ceil() verwenden, um alle Elemente innerhalb eines Arrays zu runden. Aber es funktioniert nicht.Wie man array_walk mit den eingebauten Funktionen von PHP arbeiten kann?

der Code:

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "ceil"); 
print_r($numbs); 

ausgegeben werden soll: 3,6, -10

die Fehlermeldung:

Warning: ceil() erwartet genau 1 Parameter 2 gegeben auf Linie 2

Ausgabe ist: 3,5,5, -10,5 (Wie zuvor mit ceil())

Ich habe auch versucht mit round().

Antwort

3

Ich hatte das gleiche Problem mit einer anderen PHP-Funktion. Sie können "Ihre eigene Ceil-Funktion" erstellen. In diesem Fall ist es sehr einfach zu lösen:

function myCeil(&$list){ 
    $list = ceil($list); 
} 

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "myCeil"); 
print_r($numbs); 
7

Verwenden Sie stattdessen array_map.

$numbs = array(3, 5.5, -10.5); 
$numbs = array_map("ceil", $numbs); 
print_r($numbs); 

array_walk geht tatsächlich zwei Parameter an die Callback und einige integrierte Funktionen wie nicht mit zu vielen Parametern aufgerufen wird (es gibt eine Notiz dazu auf der docs Seite für array_walk). Dies ist nur ein Warnung obwohl, es ist kein Fehler.

array_walk erfordert auch, dass der erste Parameter des Rückrufs eine Referenz, wenn Sie es das Array ändern möchten. So wurde für jedes Element noch ceil() aufgerufen, aber da der Wert nicht als Referenz verwendet wurde, wurde das Array nicht aktualisiert.

array_map ist besser für diese Situation.

+1

Das funktioniert gut. Danke –

+0

Gern geschehen :-) Manchmal ist eine 'array_ *' Funktion besser als eine andere, je nach Situation. –

2

Das liegt daran, dass array_walk Bedürfnisse Funktion, die ersten Parameter eine Referenz &

function myCeil(&$value){ 
    $value = ceil($value); 
} 

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, "myCeil"); 
print_r($numbs); 
2

Der Grund, es funktioniert nicht, weil ceil($param) nur erwartet ein Parameter statt zwei.

Was Sie tun können:

$numbs = array(3, 5.5, -10.5); 
array_walk($numbs, function($item) { 
    echo ceil($item); 
}); 

Wenn Sie diese Werte dann speichern möchten gehen Sie vor und verwenden array_map, die ein Array zurückgibt.

UPDATE

Ich schlage vor, diese answer auf Stackoverflow zu lesen, die zwischen array_map, array_walk und array_filter

hoffe, das hilft sehr gut die Unterschiede erklärt.

+0

Nicht ganz. Die * Warnung * sagt "ceil() erwartet genau 1 Parameter, 2 gegeben". 'array_walk' ruft Ihre Callback-Funktion auf und übergibt ihr 2 Parameter (' $ value' und '$ key'). Das Array wurde nicht aktualisiert, weil 'array_walk' das nur tut, wenn der' $ value' Parameter eine * Referenz * ist (und sein Wert im Callback aktualisiert wird). –

+2

Umformuliert danke! :) – flangofas

Verwandte Themen