Если / else / elseif оператор неправильно обрабатывает - PullRequest
0 голосов
/ 01 февраля 2012

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

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

/***************************** 1st image in email**********************************/
        // 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);
    }

и повторяется в общей сложности для 5 изображений. Проблема в том, что операторы if не возвращаются, как я бы надеялся.Они просто заменяют ссылку на последнюю вещь, совпадающую во всей последовательности (в масштабе повторения 5 раз)

Пример $ 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">

Может ли кто-нибудь помочь мне найти решение для этого?Спасибо

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Полагаю, я, наконец, нашел не-ООП-использование для милой переменной php

    // Slightly verbose for demo purposes
    $path = 'C://test.jpg';

    // Get the path info with PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION and PATHINFO_FILENAME.
    $pathinfo = pathinfo($path);

    // Check file extensions first to avoid E_NOTICE of index 'extension'
    if (isset($pathinfo['extension']) !== false)
    {
        // Get the file extension and append '1' as per OP's spec
        $extension = $pathinfo['extension'] . '1';

        // Make sure that the image exists before using it ($jpg1)
        if (isset($$extension) !== false)
        {
            // Funny stuff
        }
    }

В этом примере значение $ extension заканчивается на 'jpg1', поэтому если при передаче $$ extension в isset () функция проверяет, установлено ли значение $ jpg1.

Быстрый комментарий о первоначально размещенном коде:

Вместо того, чтобы вызывать preg_match итеративно до тех пор, пока вы не найдете результат, который вы ищете, было бы лучше определить расширение файла один раз, а затем использовать переключатель (в противном случае это нормально), так как требуется только одно сравнение хардкорных строк.

0 голосов
/ 01 февраля 2012

Вы используете $replace1, когда должны использовать $replace.

Если это просто опечатка в вашем вопросе, это более компактный способ сделать то же самое:

if (preg_match('/cid:([^"@]*).(png|jpg|gif|bmp)@([^"]*)/', $html_part, $m)){

    $find = '/cid:([^"@]*).'.$m[2].'@([^"]*)/';

    $replace = $png1;
    if ($m[2] == 'jpg') $replace = $jpg1;
    if ($m[2] == 'gif') $replace = $gif1;
    if ($m[2] == 'bmp') $replace = $bmp1;

    $html_part = preg_replace($find, $replace, $html_part);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...