Если оператор неправильно обрабатывает

Я пытаюсь заставить эту инструкцию if следовать: если первая позиция строки – .png, то получите $ png1 из стога сена, но если первая позиция строки равна .jpg, то получите $ jpg1 из стога сена, но если это .gif, получить $ gif1 из haystack, иначе, если ни один из них не будет найден, позиция строки будет .bmp, так что получите $ bmp1

Вот что я пробовал, но он не анализирует правильно:

<?php // if first occurence is .png get $png1 needle from haystack if (preg_match('#cid:([^"@]*).png@([^"]*)#', $html_part)) { $find = '#cid:([^"@]*).png@([^"]*)#'; $replace1 = $png1; $html_part = preg_replace($find, $replace, $html_part); } // if first occurence is .jpg get $jpg1 needle from haystack elseif (preg_match('#cid:([^"@]*).jpg@([^"]*)#', $html_part)) { $find = '#cid:([^"@]*).jpg@([^"]*)#'; $replace1 = $jpg1; $html_part = preg_replace($find, $replace, $html_part); } // if first occurence is .gif then get $gif1 needle from haystack elseif (preg_match('#cid:([^"@]*).gif@([^"]*)#', $html_part)) { $find = '#cid:([^"@]*).gif@([^"]*)#'; $replace = $gif1; $html_part = preg_replace($find, $replace, $html_part); } // if first occurence is .bmp then get $bmp1 needle from haystack else { $find = '#cid:([^"@]*).bmp@([^"]*)#'; $replace = $bmp1; $html_part = preg_replace($find, $replace, $html_part); } ?> 

Пример $html_part с добавлением разрывов строк для отображения:

 <b>Bold Text.</b> <i>Italicized Text.</i> <u>Underlined Text.</u> Plain Unformatted Text. <img width=183 height=183 id="Picture_x0020_3" src="cid:image001.png@01CCCB31.E6A152F0" alt="Description: Description: Description: cid:image001.png@01CCC701.5A896430"> <img width=153 height=145 id="Picture_x0020_2" src="cid:image002.jpg@01CCCB31.E6A152F0" alt="Description: Description: cid:image002.jpg@01CCCB1D.D3A29740"><img width=182 height=123 id="Picture_x0020_1" src="cid:image003.jpg@01CCCB31.E6A152F0" alt="Description: Description: cid:image003.jpg@01CCCB1D.D3A29740">`