использование php для завершения цикла, пока не будет найдено совпадение - PullRequest
0 голосов
/ 27 сентября 2011

Это моя первая попытка сценария php после нескольких недель обучения.Так что, в основном, я разбираю фид блога XML.Во-первых, если получена дата публикации в блоге и если она совпадает с сегодняшней датой по времени Лос-Анджелеса, она пойдет дальше и получит текущие URL-адреса сообщений в блоге за день.В противном случае он вернет "нет совпадения".После нахождения сообщений в блоге на сегодня, если будет собирать URL каждого сообщения.Теперь вот моя проблема, независимо от того, что я делаю, она всегда не находит совпадений в коде, который я ищу.Я предполагаю, что это не проверка каждого URL, но так как мои знания ограничены, я могу быть уверен.Я пытаюсь найти в каждом сообщении числовую строку с помощью регулярного выражения, и если она найдена, я хочу вывести эту строку и завершить сценарий или, если код не найден, вывести сообщение с указанием этого и завершить сценарий.Также, если вы нашли лучший или более эффективный способ переписать мой код, чтобы немного его очистить, я тоже приветствую это

/*------------------------------------------------
//XML File and Parsing
------------------------------------------------*/
//XML document 
$rss = simplexml_load_file($xmlfeed);
//Blog Dates
$blogdate = $rss->channel->item;
//Blog URLS
$blogurl = $rss->channel->item;

/*------------------------------------------------
//Date Variables
------------------------------------------------*/
//Original date format: Mon, 26 Sep 2011 22:00:08 +0000
$post_date = $date->pubDate;
//Original date format: September 26 2011
$todays_date = date("F j Y");
$timezone = new DateTimeZone('America/Los_Angeles');
//Format blog post dates into PDT
$date1 = new DateTime($post_date);
$date1->setTimeZone($timezone);
//Output date: September 26 2011
$post_date_final = $date1->format("F j Y");
//Format server date into PDT
$date2 = new DateTime($todays_date);
$date2->setTimeZone($timezone);
//Output date: September 26 2011
$todays_date_final = $date2->format("F j Y");
echo $post_date;
/*------------------------------------------------
//Checking and Looping
------------------------------------------------*/
//Looping through blog dates for a mtach
foreach ($blogdate as $date) {
    //If dates match continue to gather URLs
    if ( $post_date_final == $todays_date_final ) {
        foreach ($blogurl as $url) {
            $postone = $url->guid[0];
            $posttwo = $url->guid[1];
            $postthree = $url->guid[2];
            $postfour = $url->guid[3];
            $postfive = $url->guid[4];
            $postsix = $url->guid[5];
            $go = array($postone, $posttwo, $postthree, $postfour, $postfive, $postsix);

            foreach ($go as $stop){
                $html = file_get_contents($stop);
                preg_match('/cd=\b[0-9]{8,15}\b/', $html, $match);
                $regex_match = $match[0];

                if (isset($regex_match)) {
                    echo $regex_match;
                }else{
                    echo "no match";
                    exit;
                }
            }
        }
    }else{
        echo "no match";
        exit;
    }
}

1 Ответ

1 голос
/ 27 сентября 2011

Я только быстро просмотрел ваш код, но увидел эту строку, которую вы, возможно, захотите изменить:

if(!isset($regex_match))

Это говорит о том, что если $ regex_match не установлено, то echo $ regex_match.Это означает, что если вы пытаетесь повторить его, когда он что-то не нашел.

Попробуйте убрать это!и посмотрим, поможет ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...