Schwierigkeiten beim Befehl array_filter

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?

Magst du mal ein Beispiel bauen, welches ich Copy&Pasten kann (=Mit Beispieldaten)?

Dann kann ich schnell mal gucken. :slight_smile:

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);});  

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.