2011-06-09 5 views
9

क्या निम्न करने के लिए सबसे अच्छा तरीका है:PHP में ठीक से एक रास्ता विभाजित करने के लिए कैसे

मैं एक AJAX अनुरोध के साथ

जैसे एक रास्ता मिल

क्या है

dir1 >> dir2 >> dir3 >> dir4 

उनमें से प्रत्येक की जा रही href विशेषता

/dir1 

/dir1/dir2 

/dir1/dir2/dir3 

/dir1/dir2/dir3/dir4 

क्रमशः होने के साथ एचटीएमएल एंकर टैग: dir1/dir2/dir3/dir4

मैं अपने वेब पेज पर इस तरह से प्रस्तुत करने की जरूरत है इसे प्राप्त करने के लिए सबसे सुरुचिपूर्ण और कुशल तरीका? पहले से

<?php 
$dirs = explode(PATH_SEPARATOR, $this->metadata["path"]); 
    foreach ($dirs as $key=>$val) { 
      if ($val == '') { 
       continue; 
      } 
      $pathArray = array(); 
      for ($i = 0; $i <= $key; $i++) { 
       array_push($pathArray, $dirs[$i]); 
      } 
      $path = implode('/', $pathArray); 
      echo " >> <a href=" . $path . ">" . truncate($val) . "</a>"; 
    } 
    ?> 

धन्यवाद

+0

की आवश्यकता होगी मुझे सही लगता है (और इतना गंदे नहीं), हालांकि 'truncate' फ़ंक्शन मौजूद नहीं है। क्या यह एक कस्टम फ़ंक्शन है या क्या आपका मतलब 'ट्रिम' है? –

+0

यह एक कस्टम फ़ंक्शन है ... तो..मुझे लगता है कि यह कोड का एक सुंदर ब्लॉक है? :) – nezgerland

+0

ठीक है, मैं ऐसा करता हूं। यदि यह सुरुचिपूर्ण है, तो hoorray: D –

उत्तर

11

कुछ इस तरह हो सकता है (अगर मैं अपने इरादे का अधिकार मिल गया):

अब तक, मैं इस जो मुझे लगता है कि जैसे कुछ कर रहा हूँ है वास्तव में गंदा

<?php 
$str = 'dir1/dir2/dir3/dir4'; 

$output = array(); 
$chunks = explode('/', $str); 
foreach ($chunks as $i => $chunk) { 
    $output[] = sprintf(
     '<a href="#/%s">%s</a>', 
     implode('/', array_slice($chunks, 0, $i + 1)), 
     $chunk 
    ); 
} 

echo implode(' &gt;&gt; ', $output); 

आउटपुट:

<a href="#/dir1">dir1</a> &gt;&gt; 
<a href="#/dir1/dir2">dir2</a> &gt;&gt; 
<a href="#/dir1/dir2/dir3">dir3</a> &gt;&gt; 
<a href="#/dir1/dir2/dir3/dir4">dir4</a> 
+0

मुझे आपके समाधान को सबसे अच्छा पसंद है और मैं आपके साथ जाऊंगा। आपके समय और आपके उत्तर के लिए बहुत बहुत धन्यवाद। – nezgerland

+0

विभिन्न स्लेश के साथ अलग फ़ाइल सिस्टम के बारे में क्या? – Sevenearths

+0

@ सेवेनर्थ्स मैं ओएस विशिष्ट फाइल सिस्टम से संबंध नहीं देखता हूं। लेकिन यदि आवश्यकता हो, तो कोड में '"/"' के अलावा बस एक अलग चार का प्रयोग करें। – Yoshi

1

मैं इस तरह यह करना चाहता हूँ ...

<?php 

$path = 'dir1/dir2/dir3/dir4'; 
$dirs = explode('/', $path); 

while (count($dirs) > 0) { 
    $link = '/' . implode($dirs, '/'); 
    $text = array_pop($dirs); 
    $breadcrumb = "<a href=\"$link\">$text</a>" . $breadcrumb; 
    if (count($dirs) > 0) { 
     $breadcrumb = ' &gt;&gt; ' . $breadcrumb; 
    } 
} 

echo $breadcrumb; 

तो आप जो URL PATH_SEPARATOR उपयोग करने के लिए क्योंकि URL को हमेशा / का उपयोग करना चाहिए आवश्यकता नहीं होनी चाहिए के आधार पर इस मार्ग मिल रहे हैं। यह फाइल सिस्टम पथ से प्राप्त होता है, तो आप लाइन पर बजाय '/' में यह स्वैप करने के लिए 4.

+0

PATH_SEPARATOR के बारे में धन्यवाद .. मैं अब विस्फोट कर रहा हूं ('/', $ path) :) – nezgerland

+2

@ user787124: ध्यान दें कि' PATH_SEPARATOR' नहीं है/या \ - यह है; या: क्रमशः विंडोज और यूनिक्स पर। यह 'DIRECTORY_SEPARATOR' है जिसका आप उपयोग करना चाहते हैं। –

+0

अच्छा जवाब। धन्यवाद दोस्त – Thamaraiselvam

1

वार 1

<?php 

    $str = '/dir1/dir2/dir3/dir4'; 
    $arr = array_filter(explode('/',$str)); 
    $out = array('/'.implode('/',$arr).'/'); 
    while((array_pop($arr) and !empty($arr))){ 
     $out[] = '/'.implode('/',$arr).'/'; 
    }; 

    print_r($out); 

    /* 
    Array(
     [0] => /dir1/dir2/dir3/dir4/ 
     [1] => /dir1/dir2/dir3/ 
     [2] => /dir1/dir2/ 
     [3] => /dir1/ 
    ) 
    */ 

?> 

वार 2 (लिंक)

<?php 

    $str = '/dir1/dir2/dir3/dir4'; 
    $arr = array_filter(explode('/',$str)); 
    $out = array('<a href="/'.implode('/',$arr).'/">'.basename($str).'</a>'); 
    while((array_pop($arr) and !empty($arr))){ 
     $out[] = '<a href="/'.implode('/',$arr).'/">'.end($arr).'</a>'; 
    }; 

    print_r($out); 

    /* 
    Array 
    (
     [0] => <a href="/dir1/dir2/dir3/dir4/">dir4</a> 
     [1] => <a href="/dir1/dir2/dir3/">dir3</a> 
     [2] => <a href="/dir1/dir2/">dir2</a> 
     [3] => <a href="/dir1/">dir1</a> 
    ) 
    */ 

?> 
संबंधित मुद्दे