2010-11-09 20 views
1

Im ayant ce problème ... je me demande si l'un de vous avez des idées pour le résoudre?PHP Explode par lettre majuscule?

Je dois séparer le nom de la leçon, le nom de l'enseignant et la classe.

Progr.al.Janek Mandero 405 Arv.võr.Tom KülaotsÕ 205

Progr.al. est le nom de la leçon, Janek Mander est le nom de l'enseignant et Õ 405 est Classroom. Arv.võr. est le nom de la leçon, Tom KÜlaots est le nom de l'enseignant et Õ 205 est Classroom.

Je dois les séparer pour que je puisse les identifier ... probablement dans un tableau

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

Maintenant, j'ai cette idée ... si je peux détecter lettre majuscule et remplacer cette chaîne avec et # {uppercaseletter } alors je pourrais l'exploser ... Õ 405 je peux exploser par Õ comme chaque classe a un Õ avant eux.

Bien Progrl.al.Janek ManderÕ 405 ... il y a seulement trois lettres majuscules ... et le prénom du professeur a toujours la deuxième lettre majuscule ... est-ce que je pourrais utiliser ça à mon avantage ou faire je dois réécrire le script dom?


Code entier jusqu'à présent ...

<!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> 
+0

Personnellement, je suggère de mettre les données ensemble dans un format plus organisé en premier lieu, en se fondant sur regex et [ 'preg_split()'] (http://www.php.net/manual/fr/function.preg-split.php) (sorte de 'explode()' avec des expressions régulières) est fragile au mieux. –

+0

Bien avant que dev-null-dweller ne me donne une solution, j'ai utilisé ceci: $ TestStr = "Tom Kulaots"; $ s = preg_replace ('/ ([^ \ s]) ([A-Z]) /', '\ 1 # \ 2', $ TestStr); $ info = exploser ("#", $ s); $ TestStr = $ info [1]; $ info = explode ("Õ", $ TestStr); $ name = $ info [0]; –

Répondre

1

Tricky, mais je le ferais de cette façon: (à l'intérieur de la boucle 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

Fonctionne comme un charme. Merci. –

0

Je pense que si vous avez un certain modèle clair de vos données d'entrée, vous pouvez approcher une meilleure solution en utilisant des expressions régulières.