each(function (Crawler $node) use (&$surcharges) { $surcharge = new Surcharge(); $surchargeLabel = $node->attr('bezeichnung'); $surcharge->label = empty($surchargeLabel) ? 'unbekannt' : $surchargeLabel; $surcharge->totalPrice = $this->stringToFloat($node->attr('gesamtpreis')); $mapping = $this->stringToArray($node->attr('zuordnung')); $surcharge->mapping = array_map(function ($index) { return (int) $index - 1; }, $mapping); $individualPrices = array_map( function ($price) { return $this->stringToFloat($price); }, $this->stringToArray($node->attr('einzelpreis', ''), '/') ); $surcharge->individualPrice = array_combine($surcharge->mapping, $individualPrices); $surcharges[] = $surcharge; }); return $surcharges; } }