2010-08-19 22 views
5

मैं अपने पहले और चौथे <ol> टैग्स में दो अलग-अलग वर्ग विशेषताओं को जोड़ना चाहता हूं लेकिन मुझे वास्तव में यह नहीं पता कि यह मेरे रिकर्सिव फ़ंक्शन में कैसे जोड़ना है? क्या कोई मेरी मदत कर सकता है?PHP रिकर्सिव फ़ंक्शन समस्या?

यहां मेरी PHP स्क्रिप्ट है।

function make_list ($parent = 0, $parent_url = '') { 
    global $link; 
    echo '<ol>'; 

    foreach ($parent as $id => $cat) { 
     if($cat['parent_id'] == '0'){ 
      $url = $parent_url . $cat['url']; 
      echo '<li><a href="' . $url . '" title="' . $cat['category'] . ' Category Link" style="color: orange; font-weight: bold;">' . $cat['category'] . '</a>';    
     } else { 
      $url = $parent_url . $cat['url']; 
      // Display the item: 
      echo '<li><a href="' . $url . '" title="' . $cat['category'] . ' Category Link">' . $cat['category'] . '</a>'; 
     } 

     if (isset($link[$id])) { 
      make_list($link[$id], $url); 
     }    
     echo '</li>'; 
    }  
    echo '</ol>'; 
} 

$mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC"); 
if (!$dbc) { 
    print mysqli_error(); 
} 

$link = array(); 

while (list($id, $parent_id, $category, $url, $depth) = mysqli_fetch_array($dbc)) { 
    $link[$parent_id][$id] = array('parent_id' => $parent_id, 'category' => $category, 'url' => $url, 'depth' => $depth); 
} 

make_list($link[0]); 

आउटपुट

<ol> 
    <li>First Nested List</li> 
    <li>First Nested List</li> 
    <li>First Nested List 
     <ol> 
     <li>Second Nested List</li> 
     <li>Second Nested List</li> 
     <li>Second Nested List 
      <ol> 
      <li>Third Nested List</li> 
      <li>Third Nested List</li> 
      <li>Third Nested List 
       <ol> 
       <li>Fourth Nested List</li> 
       <li>Fourth Nested List</li> 
       <li>Fourth Nested List</li> 
       </ol> 
      </li> 
      <li>Third Nested List</li> 
      <li>Third Nested List</li> 
      </ol> 
     </li> 
     <li>Second Nested List</li> 
     <li>Second Nested List</li> 
     </ol> 
    </li> 
    <li>First Nested List</li> 
    <li>First Nested List</li> 
</ol> 
+0

मुझे लगता है कि रिकर्सन अनावश्यक है। आप सरणी के सभी कुंजी, मूल्य जोड़े पर पुनरावृत्त कर रहे हैं। ऐसा लगता है कि आपको उपयोग करने के लिए आवश्यक चर को सॉर्ट करने में कुछ समस्याएं आ रही हैं। चर के उपयोग के लिए बहुत सारे काम की जरूरत है। –

+0

@ पीटर अजताई श्रेणियों को सही ढंग से प्रदर्शित करने के लिए रिकर्सन आवश्यक है जब तक कि आप एक बेहतर स्क्रिप्ट के साथ आ सकते हैं जो वही काम करता है? – GENx

+0

आपको '$ link' पास करना होगा और केवल उसमें 'make_list' में होना चाहिए, फिर ऐसा लगता है कि आप अपने इच्छित सभी लिंक को पुन: उत्पन्न करने और उत्पादित करने के लिए दूसरे में घोंसला वाले 1 foreach का उपयोग कर सकते हैं। मैं वास्तव में समझ नहीं पा रहा हूं कि आप क्या करने का प्रयास कर रहे हैं, इसलिए मैं विस्तृत उत्तर नहीं दे सकता, लेकिन यह स्पष्ट है कि आपको '$ लिंक' पर फिर से चलना चाहिए। –

उत्तर

4

बस पैरामीटर के रूप में गहराई जोड़ें। फिर जांचें कि क्या 0 या 4 या जो भी आपको चाहिए।

function make_list ($parent = 0, $parent_url = '', $depth=0) { 
... 
make_list($link[$id], $url, $depth+1); 
... 
+2

मैं इसे '$ गहराई' कहूंगा। – mpen

+0

@ मार्क: अच्छा विचार। –

0

एक वैश्विक $num_links चर जोड़ें। जब भी आप <ol> उत्सर्जित करते हैं, तो इसे बढ़ाएं। जब आप इच्छित मानों को हिट करते हैं तो गुण जोड़ें।

हालांकि, यदि आप ऐसा कर रहे हैं, तो संभवतः आपके द्वारा चुने गए कार्य और आपके द्वारा हल किए जाने वाले कार्य के बीच एक मेल नहीं है ... "पहला या चौथा" संभवतः वास्तविक स्थिति नहीं है चेक।

+0

@ बॉरिडाइड आपने मुझे खो दिया? – GENx

+0

@GENx: मुझे संदेह है कि आप क्या चाहते हैं "जब भी मैं इस फ़ंक्शन को कॉल करता हूं, तो पहले और चौथी चीजें जो जादुई बनाती हैं"। यह एक सामान्य बात नहीं है। – Borealid

+0

अच्छी तरह से पहले 'ol' टैग के बारे में कैसे? – GENx

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