PHP взорваться заглавными буквами? - PullRequest
1 голос
/ 10 ноября 2010

У меня возникла эта проблема ... Интересно, есть ли у кого-нибудь из вас идеи, как ее решить?

Мне нужно разделить Имя урока, Имя учителя и Классную комнату.

Прогр.al.Janek ManderÕ 405 Arv.võr.Tom KülaotsÕ 205

Progr.al.Имя Урока, Янек Мандер - Имя Учителя, а 5 405 - Классная.Arv.võr.это имя урока, Том Кюлаотс - имя Учителя, а 5 205. - Классная комната.

Мне нужно разделить их, чтобы я мог их идентифицировать ... вероятно, в массив

info[0] = "Progr.al."
info[1] = "Janek Mander"
info[2] = "Õ 405"

Теперь у меня естьидея ... если я могу обнаружить заглавную букву и заменить эту строку на и # {uppercaseletter}, тогда я могу взорвать ее ... Õ 405 я могу взорваться на Õ, так как в каждом классе есть Õ перед ними.

Ну, Progrl.al.Janek ManderÕ 405 ... есть только три заглавные буквы ... и имя учителя всегда имеет вторую заглавную букву ... есть ли способ, которым я мог бы использовать это в своем сообщении, или мне нужнопереписать сценарий dom?


Весь код до сих пор ...

<!doctype html>
<html>
<head>
    <title>Ilus tunniplaan</title>
    <style>
        .tund
        {
            width: 140px;
            width: 405px;
            border: 1px solid black;
        }
        .
    </style>
</head>
<body>
<?php
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('display_errors', 'Off');
ini_set('log_errors', 'Off');

function grab_page( $site )
{
    $ch = curl_init( );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt( $ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT'] );
    curl_setopt( $ch, CURLOPT_TIMEOUT, 40 );
    curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );
    curl_setopt( $ch, CURLOPT_URL, $site );
    ob_start( );
    return curl_exec ( $ch );
    ob_end_clean( );
    curl_close ( $ch );
}

$html = grab_page( "http://web.ametikool.ee/tunniplaan/11.%20n%e4dal%2008.11%20-%2013.11/" );

 $dom = new domDocument; 
    /*** load the html into the object ***/ 
    $dom->loadHTML($html); 

    /*** the table by its tag name ***/ 
    $tables = $dom->getElementsByTagName('table'); 

    /*** get all rows from the table ***/ 
    $rows = $tables->item(0)->getElementsByTagName('tr'); 

    /*** loop over the table rows ***/ 
    foreach ($rows as $row) 
    {
        $id = $id + 1;
        if( $id > 16 )
        {
            /*** get each column by tag name ***/ 
            $cols = $row->getElementsByTagName('td'); 
            /*** echo the values ***/ 
            for ( $counter = 0; $counter <= 9; $counter += 1) 
            {
                $phrase  = $cols->item($counter)->nodeValue;
                echo $phrase . "<br/>\n";
            }
        }
    }
?>
</body>
</html>

Ответы [ 2 ]

1 голос
/ 10 ноября 2010

Сложно, но я бы сделал это так: (внутри for цикла)

for ( $counter = 0; $counter <= 9; $counter += 1)
{
    $phrase  = $cols->item($counter);

    $breaklines = $phrase->getElementsByTagName('br');
    if($breaklines->length == 2)
    {
        $br = array();
        for($i=0;$i<2;$i++)
        {
            $br[$i] = $breaklines->item($i);
        }
        //Don't try to put this two for-loops into one.
        for($i=0;$i<2;$i++)
        {
            $phrase->replaceChild($dom->createTextNode('|'), $br[$i]);
        }

        print_r(explode('|',$phrase->nodeValue)) . PHP_EOL;
    }
}
0 голосов
/ 10 ноября 2010

Я думаю, что если у вас есть какая-то четкая структура ваших входных данных, вы могли бы подойти к лучшему решению, используя регулярные выражения.

...