$matches[1][$idx], 'name' => $matches[2][$idx], 'set' => strtoupper($matches[3][$idx]), 'number' => $matches[4][$idx], ]; } /* * Select data from DB */ $db = new \PDO('sqlite:AllPrintings.sqlite'); $images = []; foreach ($cards as $card) { $query = 'SELECT scryfallId,layout from cardIdentifiers JOIN cards on cardIdentifiers.uuid=cards.uuid WHERE cards.setCode=:setCode AND cards.number=:number'; $statement = $db->prepare($query); $statement->execute(['setCode' => $card['set'], 'number' => $card['number']]); $result = $statement->fetch(); $id = $result['scryfallId'] ?? ''; if (empty($id)) { $query = 'SELECT scryfallId,layout from tokenIdentifiers JOIN tokens on tokenIdentifiers.uuid=tokens.uuid WHERE tokens.setCode=:setCode AND tokens.number=:number'; $statement = $db->prepare($query); $statement->execute(['setCode' => $card['set'], 'number' => $card['number']]); $result = $statement->fetch(); $id = $result['scryfallId'] ?? ''; if (empty($id)) { echo "$card[name] ($card[set]) $card[number] not found."; continue; } } $images[] = [ 'quantity' => $card['quantity'], 'src' => "https://cards.scryfall.io/png/front/" . substr($id, 0, 1) . "/" . substr($id, 1, 1) . "/$id.png", 'alt' => $card['name'], ]; if (in_array($result['layout'] ?? '', ['transform', 'double_faced_token'])) { $images[] = [ 'quantity' => $card['quantity'], 'src' => "https://cards.scryfall.io/png/back/" . substr($id, 0, 1) . "/" . substr($id, 1, 1) . "/$id.png", 'alt' => $card['name'], ]; } } /* * Build HTML */ $template = <<