kostenloser Webspace werbefrei: lima-city


URLs gleicher Domain gruppieren ?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    giros

    giros hat kostenlosen Webspace.

    Hallo
    ich habe eine Liste mit URLs zu Artikeln,
    wobei manche Artikel auf der gleichen Domain stehen,
    aber die URLs sind nicht sortiert gespeichert.

    Wie kann ich die URLs (Links) sortieren / ausgeben,
    dass alle, welche zur "gleichen" (... zur "selben" ??? ) Domain gehören,
    auch zusammen in einem Block (gruppiert) stehen ?!

    Liste iet eine einfache .txt Datei mit je Zeile eine URL

    http://beispiel.de/artikel/1234.htm
    http://example.org/news/abc/
    http://irgendwas.tld/content/article/
    http://beispiel.de/artikel/345.htm
    http://example.org/info/lalala/
    .. usw


    Ausgabe mache ich bisher so: (vereinfacht, ohne <a href ....> nur Liste)

    print "<ul>\n"; 
    
    $urldata = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    
    foreach($urldata as $item) { 
      print "<li>".$item."</li>\n"; 
    }
    
    print "</ul>\n";


    aber wie URLs die zur "gleichen" Domain gehören
    in einem Absatz (ul-Liste) zusammen ausgeben ?!


  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Vielleicht hilft dir das weiter:
    <ul> = unordered list => liefert unsortierte Liste
    <ol> = ordered list => liefert sortierte Liste
  4. Autor dieses Themas

    giros

    giros hat kostenlosen Webspace.

    Nein,
    das ist ja nur die Ausgabe ob Liste mit odeer ohne Nummerierung ... FAIL !!!

    ich suche einen Weg, wie ich die Liste wie z.B.

    http://beispiel.de/artikel/1234.htm
    http://example.org/news/abc/
    http://irgendwas.tld/content/article/
    http://beispiel.de/artikel/345.htm
    http://example.org/info/lalala/
    ...


    so als "nach Domain gruppierte" Ausgabe bekomme

    <ul>
      <li>http://beispiel.de/artikel/1234.htm</li>
      <li>http://beispiel.de/artikel/345.htm</li>
    </ul>
    
    <ul>
      <li>http://irgendwas.tld/content/article/</li>
    </ul>
    
    <ul>
      <li>http://example.org/news/abc/</li>
      <li>http://example.org/info/lalala/</li>
    </ul>



    also alle URLs von der Domain beispiel.de in einem Block,
    und alle URLs von der Domain irgendwas.tld in einem Block, etc. usw.

    so dass es nicht so "durcheinander" ist, sondern nach Domain gruppiert



    Beitrag zuletzt geändert: 22.4.2013 14:56:11 von giros
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Meinst du in etwa sowas:
    <?php
    
    header('content-type: text/plain');
    
    $domainlist = array(
    	'http://beispiel.de/artikel/1234.htm',
    	'http://example.org/news/abc/',
    	'http://irgendwas.tld/content/article/',
    	'http://beispiel.de/artikel/345.htm',
    	'http://example.org/info/lalala/'
    );
    
    $ordered = array();
    foreach($domainlist as $domain) {
    	if(preg_match('|^https?://([^/]+?).*$|', $domain, $match)) {
    		$name = $match[1];
    		if(!isset($ordered[$name]))
    			$ordered[$name] = array();
    		$ordered[$name][] = $domain;
    	}
    }
    
    ksort($ordered);
    foreach($ordered as $group) {
    	echo("<ul>\n");
    	sort($group);
    	foreach($group as $domain) {
    		$domain = htmlspecialchars($domain);
    		echo("\t<li>$domain</li>\n");
    	}
    	echo("</ul>\n\n");
    }
  6. etwas kürzer:
    $urldata = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    asort($urldata);
    foreach($urldata as $item) {
    $host = parse_url($item)["host"];
    echo (isset($temp)&&$temp==$host?"":"".(isset($temp)?"</ul>\n":"")."<ul>\n");
    echo "<li>".$item."</li>\n";
    $temp = parse_url($item)["host"];
    }
    echo "</ul>\n";
  7. Autor dieses Themas

    giros

    giros hat kostenlosen Webspace.

    jo, Danke

    hab jetzt ne Kombination aus beiden Vorschlägen gebaut

    $urldata = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    
    $resdata = array(); 
    
    foreach($urldata as $item) { 
      
      $ihost = parse_url($item, PHP_URL_HOST);
      
      if (!isset($resdata[$ihost])) { $resdata[$ihost] = array(); }
      
      if (!in_array($item,$resdata[$ihost])) { 
        $resdata[$ihost][] = $item; 
      }
      
    }


    damit habe ich dann ein zwei-dimensionales Array
    und kann je Domain (Host) einen Block ausgeben

    foreach($resdata as $hosts) { 
      
      print "<ul>\n";  // ---- start block 
      
      foreach($hosts as $iurl) { 
        $iname = preg_replace('|https?://|', '', $iurl);
        $ilink = '<a href="'.$iurl.'" target="_blank">'.$iurl.'</a>'; 
        print "  <li>".$ilink."</li>\n";
      }
      
      print "</ul>\n";  // ---- ende block 
      
      print "<br />&nbsp;\n";   // ---- Abstand zwischen block 
      
    }


    ok, das funktioniert

    aber ich habe auch viele URLs die nur von einer einzigen Domain sind,
    die bekommen jetzt auch alle jeder seinen eigenen Block ...

    ... evtl. noch so machen, dass alle diese URLs, deren Host (Domain) nur 1x vorkommt
    zusammen in einen Block kommen, also nur neuer Block wenn mind. 2 URLs von Domain
  8. Hallo

    Du kannst vor der Ausgabe foreach noch eine foreach-Schleife machen


    foreach($url_data as $hkey => $hosts) { 
    	if (count($hosts) == 1) { 
    		$url_data['mixed'][] = $hosts[0]; 
    		unset($url_data[$hkey]); 
    	}
    }


    dann sind alle URLs die nur zu einer einzigen Domain gehören
    nicht mehr als eigene Sub-Arrays vorhanden sondern im Sub-Array $url_data['mixed'] abgelegt .

  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!