anna: festgelegte wörter zählen

Hallo Selfhtml forum :)

Ich habe so meine Schwierigkeiten mit php.

ich möchte gern folgendes umsetzen:

über ein script wird nach eingabe einer url ect. ein sitemap xml coe in einer textarea ausgegben.

[PHP]

echo '<textarea style="width:610px;height:1000px" rows="60" cols="75" name="eins">';
echo '<?xml version="1.0" encoding="UTF-8"?>
'.$engine.'
<!--#Generated -->
';

foreach ($links as $var)
{

print "<url>
<loc>$var</loc>
<lastmod>$date</lastmod>
<changefreq>$max_results</changefreq>
<priority>$priority</priority>
</url>
";
}
echo'</urlset>';
echo '</textarea>';

[/PHP]

mein Problem ist für jemandem der etwas mehr als ich von php versteht eher simpel.

Ich möchte gern alle ausgegebenen links welche in <loc></loc> stehen zusammenzählen um somit die Anzahl der ermittelten url`s auszugeben.

wahrscheinlich ist es sinnvoller gleich beim ermitteln der url's diese zu zählen. Aber auch da weiß ich nicht recht weiter.

[PHP]

preg_match('@^(?:http://)?([^/]+)@i',$url, $matches);
$host = $matches[1];

if(strrpos($url, "/") > 10)
$root= substr($url,0,strrpos($url, "/"));
else $root= $url;

//Create an array to save urls
$links=array();

preg_match_all('/<a href="(.*)"/U',$store, $matches, PREG_SET_ORDER);

foreach ($matches as $val)
{

if(strpos($val[1],'#') === FALSE && strpos($val[1],'http://') === FALSE && strpos($val[1],'@') === FALSE)
 if(!in_array(trim($val[1]),$links))
 if(strpos(trim($val[1]),'/') == 0 && strpos(trim($val[1]),'/') !== FALSE)
 $links[]='http://'.$host.trim($val[1]);
 else
 $links[]=''.$root.'/'.trim($val[1]);

}

[/PHP]

Es wäre schön wenn einer von euch php begeisterten einen Anstoß geben könnten.

liebe grüße anna

  1. Ich möchte gern alle ausgegebenen links welche in <loc></loc> stehen zusammenzählen um somit die Anzahl der ermittelten url`s auszugeben.

    Ermittle einfach die Anzahl der Elemente des Arrays $links.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Zitat des Tages || Falle Aufteilungsbescheid || RT 221 Erfurt-Altstadt i.V.
    1. Ich möchte gern alle ausgegebenen links welche in <loc></loc> stehen zusammenzählen um somit die Anzahl der ermittelten url`s auszugeben.

      Ermittle einfach die Anzahl der Elemente des Arrays $links.

      Siechfred

      Hallo Sichfred

      Dank für den Tip.
      Funktioniert super.

      Vielen Vielen Vielen Vielen Liebn dank dir. :) :)

      Lg anna

  2. Hallo anna,

    mein Problem ist für jemandem der etwas mehr als ich von php versteht eher simpel.
    Ich möchte gern alle ausgegebenen links welche in <loc></loc> stehen zusammenzählen um somit die Anzahl der ermittelten

    url`s auszugeben.

    [PHP]

    Für PHP-Quelltexte eignet sich [соdе lang=php] am Anfang und [/соdе] am Ende besser.

    preg_match('@^(?:http://)?([^/]+)@i',$url, $matches);
    $host = $matches[1];

    if(strrpos($url, "/") > 10)
    $root= substr($url,0,strrpos($url, "/"));
    else $root= $url;

    //Create an array to save urls
    $links=array();

    preg_match_all('/<a href="(.*)"/U',$store, $matches, PREG_SET_ORDER);

    Sooo, du hast jetzt ein Array $matches. Das enthält hoffentlich alle Links. Die Anzahl der Elemente eines Arrays zählt man in PHP mit count(). Da du preg_match_all() den Parameter PREG_SET_ORDER mitgegeben hast, kannst du einfach

      
    $anzahl_der_links = count($matches);  
    
    ~~~schreiben. Solltest du mal in die Verlegenheit kommen, PREG\_PATTERN\_ORDER benutzen zu müssen (das ist die Voreinstellung), dann kannst du stattdessen  
    ~~~php
      
    $anzahl_der_links = count($matches[0]);  
    
    ~~~benutzen. Es empfiehlt sich aber, probehalber vorher mit print\_r() mal anzuschauen, was denn so in $matches steht.  
      
    MffG  
    EisFuX
    
    -- 
    [Nichts ist dem Zuwachs an Wissen förderlicher als nach einer Antwort korrigiert zu werden.](http://community.de.selfhtml.org/my/zitatesammlung/zitat119)
    
    1. Sooo, du hast jetzt ein Array $matches. Das enthält hoffentlich alle Links. Die Anzahl der Elemente eines Arrays zählt man in PHP mit count(). Da du preg_match_all() den Parameter PREG_SET_ORDER mitgegeben hast, kannst du einfach

      $anzahl_der_links = count($matches);

      
      > ~~~php
        
      
      > $anzahl_der_links = count($matches[0]);  
      > 
      
      ~~~benutzen. Es empfiehlt sich aber, probehalber vorher mit print\_r() mal anzuschauen, was denn so in $matches steht.  
      
      >   
      > MffG  
      > EisFuX  
        
      hallo Eisfux  
        
      also in $matches stehenleider auch einige externe links welche sich auf der seite befinden. habe nicht genau nachgeschaut, aber es sind wohl alle links die er findet.  
        
      mit PREG\_PATTERN\_ORDER kann ich leider garnix anfangen.  
        
      (wenn in meine beiträgen der ein oder andere buchstabe fehlt bitte ich dies zu entchuldign. ich vermute der accu der tastatur ist leer)  
        
      lg ana  
        
      
      
    2. der Tip von Sichfried hat funktionier.

      Natürlich hat sein Tip wunderbar mit deinem codesnippet harmoniert.

      :) :)
      Danke dir ganz lieb.!

      Lg
      anna