2010-08-19 13 views
5

Quiero agregar dos atributos de clase diferentes a mis primeras y cuartas etiquetas <ol>, pero realmente no sé cómo agregarlas a mi función recursiva. ¿alguien me puede ayudar?Problema de la función recursiva de PHP?

Aquí está mi script 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]); 

salida

<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

Creo que la recursividad es innecesaria. Está iterando sobre todos los pares clave, valor de una matriz. Parece que tienes problemas para ordenar las variables que necesitas usar. El uso de variables necesita mucho trabajo. –

+0

@Peter Ajtai, la recursividad es necesaria para mostrar las categorías correctamente, a menos que pueda obtener un mejor guión que haga lo mismo. – GENx

+0

Debería pasar '$ link' y solo eso en' make_list', entonces parece que puede usar 1 foreach anidado en otro para iterar y producir todos los enlaces que desee. No entiendo exactamente lo que intentas hacer, así que no puedo generar una respuesta detallada, pero está claro que deberías iterar sobre '$ link'. –

Respuesta

4

Solo agregue profundidad como parámetro. Luego verifica si es 0 o 4 o lo que necesites.

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

Lo llamaría '$ depth'. – mpen

+0

@Mark: Buena idea. –

0

Agregar una variable global $num_links. Siempre que emita un <ol>, increméntelo. Agregue los atributos cuando llegue a los valores que desea.

Sin embargo, si lo hace, es probable que haya un desajuste entre la función que ha elegido y la tarea que está resolviendo ... "La primera o la cuarta" es probable que no sea la condición real que desea comprobar.

+0

@Borealid ¿me has perdido? – GENx

+0

@GENx: dudo de que lo que quiere es "cada vez que llamo a esta función, tenga la primera y la cuarta cosa que cree que sea mágica". Eso no es algo normal de querer. – Borealid

+0

¿Qué tal la primera etiqueta 'ol' entonces? – GENx

Cuestiones relacionadas