Hello @chlxco,
As @devtollon already mentioned you need to read the csv on your own or you use a third party connector. As for the transformation you don't need variables or loops. This can also be done by xpath. Here is a sample of how it would work:
{"id":"2f3e2d07-7aa3-4896-96e8-112d0c004f41","brandColor":"#8C3900","connectionReferences":{"shared_commondataserviceforapps":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps/connections/62947705b1a746319ca1e59aae985afc"}},"shared_sharepointonline":{"connection":{"id":"/providers/Microsoft.PowerApps/apis/shared_sharepointonline/connections/shared-sharepointonl-b959cb53-5ecb-4b41-805f-06e7795a0bd2"}}},"connectorDisplayName":"Control","icon":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KIDxwYXRoIGQ9Im0wIDBoMzJ2MzJoLTMyeiIgZmlsbD0iIzhDMzkwMCIvPg0KIDxwYXRoIGQ9Im04IDEwaDE2djEyaC0xNnptMTUgMTF2LTEwaC0xNHYxMHptLTItOHY2aC0xMHYtNnptLTEgNXYtNGgtOHY0eiIgZmlsbD0iI2ZmZiIvPg0KPC9zdmc+DQo=","isTrigger":false,"operationName":"Scope_csv_array_converter","operationDefinition":{"type":"Scope","actions":{"Compose_converted_csv":{"type":"Compose","inputs":[{"FirstName":"John","LastName":"Doe","Class":"Math","Teacher":"Carlos"},{"FirstName":"John","LastName":"Doe","Class":"English","Teacher":"Anna"},{"FirstName":"John","LastName":"Doe","Class":"Art","Teacher":"Kim"},{"FirstName":"Sarah","LastName":"Miller","Class":"Math","Teacher":"Kelly"},{"FirstName":"Sarah","LastName":"Miller","Class":"Art","Teacher":"Matt"}],"runAfter":{},"metadata":{"operationMetadataId":"93bb91cd-6bbc-4985-bee7-6000e99181f6"}},"Select_add_schedule":{"type":"Select","inputs":{"from":"@outputs('Compose_converted_csv')","select":"@addProperty(item(), 'schedule', concat('{\"Class\":\"', item()['Class'], '\",\"Teacher\":\"', item()['Teacher'], '\"}'))"},"runAfter":{"Select_names":["Succeeded"]},"metadata":{"operationMetadataId":"cb2bb348-0d88-4fd9-a7a8-1dccd5b9c310"}},"Compose_xml":{"type":"Compose","inputs":"@xml(json(concat('{ \"root\": { \"user\": ', body('Select_add_schedule'), ' }}')))","runAfter":{"Select_add_schedule":["Succeeded"]},"metadata":{"operationMetadataId":"29d08333-b964-43ef-9c21-42ef9c5ebafb"}},"Select_api_payload":{"type":"Select","inputs":{"from":"@union(body('Select_names'),body('Select_names'))","select":{"FirstName":"@item()['FirstName']","LastName":"@item()['LastName']","Schedule":"@json(concat('[', join(xpath(outputs('Compose_xml'), concat('root/user[FirstName=\"', item()['FirstName'] ,'\" and LastName=\"', item()['LastName'] ,'\"]/schedule/text()')), ','), ']'))"}},"runAfter":{"Compose_xml":["Succeeded"]},"metadata":{"operationMetadataId":"96eb86b0-2873-4e87-b083-4ec11bb6df7e"}},"Select_names":{"type":"Select","inputs":{"from":"@outputs('Compose_converted_csv')","select":{"FirstName":"@item()['FirstName']","LastName":"@item()['LastName']"}},"runAfter":{"Compose_converted_csv":["Succeeded"]},"metadata":{"operationMetadataId":"a417abd8-8ad4-4598-a230-eea5bcb1e41e"}}},"runAfter":{},"metadata":{"operationMetadataId":"4976f52b-8aba-453b-8132-9bf875c42167"}}}
You can add this by using the clipboard in the old designer.
If you want to go the loop way, I would suggest to create an array of FirstName and LastName and use union to loop through it. Now you could use filter array, select and compose to create your record. After the loop you have the array you wanted by using the output of the compose action.
I would go the xpath way.