Boris Johnson has apologised to Nazanin Zaghari-Ratcliffe for the "further anguish" caused by his error over her detention in Iran.