Der Erste var_dump gibt die ID zurück (die natürlich dynamisch gesetzt wird), jedoch die zweite var_dump gibt NULL zurück.
Kann mir jemand sagen warum und wie man es löst?
was ist $bar und was ist der Wert von $bar
– Nitish Kumar
23. September 2014 um 11:46 Uhr
@NitishKumar $bar ist normalerweise ein Array
– php-dev
23. September 2014 um 11:49 Uhr
@php-dev Wir können sagen, dass es definitiv ein Array ist, weil es keinen PHP-Fehler auslöst. Es darf nicht stets definitiv ein Array sein, abhängig vom Code, aber es ist definitiv ein Array in dem Anwendungsfall, in dem er den im OP beschriebenen Fehler erhält
– Jo
23. September 2014 um 11:54 Uhr
Entschuldigung, es ist tatsächlich ein Array mit IDs.
– Sander Koedood
23. September 2014 um 11:55 Uhr
Die Variable $id liegt nicht im Funktionsumfang. Sie müssen die verwenden use -Klausel, um externe Variablen zugänglich zu machen:
$foo = array_filter($bar, function($obj) use ($id) {
if (isset($obj->foo)) {
var_dump($id);
if ($obj->foo == $id) return true;
}
return false;
});
Notiz: Benötigt PHP 5.3.x … siehe auch stackoverflow.com/a/25994339/42223
– dreftymac
6. Februar 2017 um 22:05 Uhr
@dreftymac 5.3 ist nur für die Syntax anonymer Funktionen erforderlich, es ist nicht spezifisch für die use Modifikator.
– Barmar
6. Februar 2017 um 22:09 Uhr
Problem mit variablem Umfang!
Einfache Lösung wäre:
$id = '1';
var_dump($id);
$foo = array_filter($bar, function($obj){
global $id;
if (isset($obj->foo)) {
var_dump($id);
if ($obj->foo == $id) return true;
}
return false;
});
oder seit PHP 5.3
$id = '1';
var_dump($id);
$foo = array_filter($bar, function($obj) use ($id) {
if (isset($obj->foo)) {
var_dump($id);
if ($obj->foo == $id) return true;
}
return false;
});
Ich hoffe es hilft
Ich glaube nicht, dass die erste Version vor 5.3 funktionieren würde, da anonyme Funktionen in 5.3 hinzugefügt wurden. Früher müssten Sie die verwenden create_function() Funktion, zusammen mit der global Erklärung.
– Barmar
6. Februar 2017 um 22:11 Uhr
Weil Ihre Verschlussfunktion nicht sehen kann $id. Du brauchst die use Stichwort:
$foo = array_filter($bar, function($obj) use ($id) {
13442800cookie-checkVerwenden Sie eine externe Variable in array_filteryes
was ist $bar und was ist der Wert von $bar
– Nitish Kumar
23. September 2014 um 11:46 Uhr
@NitishKumar
$bar
ist normalerweise ein Array– php-dev
23. September 2014 um 11:49 Uhr
@php-dev Wir können sagen, dass es definitiv ein Array ist, weil es keinen PHP-Fehler auslöst. Es darf nicht stets definitiv ein Array sein, abhängig vom Code, aber es ist definitiv ein Array in dem Anwendungsfall, in dem er den im OP beschriebenen Fehler erhält
– Jo
23. September 2014 um 11:54 Uhr
Entschuldigung, es ist tatsächlich ein Array mit IDs.
– Sander Koedood
23. September 2014 um 11:55 Uhr