each(function (Crawler $node) use (&$insurances) { $insurance = new Insurance(); $insurance->id = (int) $node->attr('idversicherung'); $insurance->label = $node->attr('bezeichnung'); $insurance->price = $this->stringToFloat($node->attr('gesamtpreis')); // Parse participant mapping (zuordnung attribute) $mapping = $this->stringToArray($node->attr('zuordnung')); $insurance->mapping = array_map(function ($index) { return (int) $index - 1; }, $mapping); // Parse individual prices per participant $individualPrices = array_map( function ($price) { return $this->stringToFloat($price); }, $this->stringToArray($node->attr('einzelpreis', ''), '/') ); $insurance->individualPrice = array_combine($insurance->mapping, $individualPrices); $insurances[$insurance->id] = $insurance; }); return $insurances; } }