Hallo,
ich habe folgenden PHP-Code. Er funktioniert. Aber ich will die foreach-Schleife durch array_filter ersetzen und habe meine Schwierigkeiten.
$activeOperatingModes = array();
foreach ($operatingModes as $operatingMode)
{
if ($operatingMode->Active)
$activeOperatingModes [] = $operatingMode;
}
echo count($activeOperatingModes)."
";
Foreach-Schleife soll ersetzt werden durch:
$activeOperatingModes[] = array_filter($operatingModes, function($operatingMode) {return ($operatingMode->Active);});
Der Count-Befehl gibt immer den Wert 1 zurück, obwohl kein Objekt die Property Active == true hat und im Array $activeOperatingModes ist kein Objekt $operatingMode, obwohl mindestens ein Objekt die Property Active == true hat.
Was mache ich beim Befehl array_filter falsch?
paresy
2. Juli 2019 um 14:14
2
Magst du mal ein Beispiel bauen, welches ich Copy&Pasten kann (=Mit Beispieldaten)?
Dann kann ich schnell mal gucken.
paresy
Hallo paresy,
ich habe ein einfaches Beispiel gebaut (s. Anhang).
Danke für deine Hilfe.
15629.ips.zip (448 Bytes)
array_filter gibt dir bereits ein gefiltertes Array zurück, du hast es nur in ein weiteres Array gepackt und deshalb bekommst du beim count auch eine 1 zurück. So sollte es funktionieren:
$activeOperatingModes = array_filter($operatingModes, function($operatingMode) {return ($operatingMode->Active);});
BestEx
3. Juli 2019 um 12:20
5
Schöne Funktion, kannte ich gar nicht.
Ich hab das mal umgebaut
Der folgende Aufruf gibt alle ID`s der IPS Objekte zurück deren Namen im Array $search gelistet wurden (in meinem Fall „Dauer“ und „STATEBEW“)
$search = ["Dauer","STATEBEW"];
$gesuchte_objekte = array_filter(IPS_GetObjectList (), function ($object){global $search; if(in_array(IPS_GetName ($object), $search)) {return true;}});
Hallo PixelHomie,
ja, das war die Ursache. Vielen Dank für deine Hilfe.