FAQ |
Kalender |
2004-08-05, 22:36 | #1 | |||
|
||||
Flitig postare
|
Jag skall göra en hierarkisk lista likt komplett.se
Datorkomponenter > CPU > Intel På sidan där print_r($tree) körs, körs precis ovan $tree=where_in_tree(3,sv_SE) Dock så får jag just nu en massa arrayer i varandra, hjälp snälla, jag vill bara ha en lång array med en massa namn i, id-numren skulle vara bra att ha också så man kan göra korrekta länkar av dem. Jag förstår självklart att arrayen måste kastas om så att sist är först osv. Tabellen prodcat: Kod:
id en_ENnamn sv_SEnamn subcat 1 Datorkomponenter Computercomponents 2 CPU CPU 1 3 Intel Intel 2 Kod:
function where_in_tree($id,$lang) { //$id är värdet som är i den nuvarande kategorins id-kolumn. //$lang är som vanligt språkvariabeln som skickas runt för att få rätt språk på allting. $row=mysql_fetch_assoc(mysql_query("SELECT * FROM prodcat WHERE id='$id'")); $namn=$row[$lang . 'namn']; $cat[] = $namn; $subcat=$row['subcat']; if($subcat) $cat[]=where_in_tree($subcat,$lang); echo $cat; return $cat; } Kod:
ArrayArrayArrayArray ( [0] => Intel [1] => Array ( [0] => CPU [1] => Array ( [0] => Datorkomponenter ) ) ) |
|||
Svara med citat |
2004-08-06, 00:10 | #2 | ||
|
|||
Supermoderator
|
Gör om tabellstrukturen till:
id, parent, en_name, sv_name Få in allt i en array genom: Kod:
$result = mysql_query('SELECT * FROM table'); while ( $row = mysql_fetch_array($result) ) { $arr[$row['parent']][] = $row; } Kod:
function recursive_output($array, $parent) { for ( $i = 0; $i < count($array[$parent]); $i++ ) { echo $array[$parent][$i]['en_name']; echo '<br />'; recursive_output($array, $array[$parent][$i]['id']); } } recursive_output($arr, 0);
__________________
www.ip2nation.com (ip till land) |
||
Svara med citat |
2004-08-06, 00:13 | #3 | |||
|
||||
Flitig postare
|
på vilket sätt skiljer sig tabellstrukturen?
|
|||
Svara med citat |
2004-08-06, 00:20 | #4 | ||
|
|||
Supermoderator
|
Citat:
parent, idt på föräldern till den här kategorin (0 om det är en huvudkategori) (Jag föredrar att ha det på det viset.) Jag kanske missuppfattade, du vill bara skriva ut "vägen" för en enskild produkt eller? I så fall borde följande fungera, förutsatt att det är tabellstrukturen jag nämnde tidigare (du kanske behöver köra array_reverse eller likn). Kod:
function recursive_output_path($id, $lang) { static $_recursive_output_path; $row = mysql_fetch_assoc(mysql_query('SELECT * FROM prodcat WHERE id = ' . $id)); if ( $row['parent'] > 0 ) { $_recursive_output_path[] = $row[$lang . '_name']; recursive_output_path($row['parent'], $lang); } else { $_recursive_output_path[] = $row[$lang . '_name']; } return $_recursive_output_path; }
__________________
www.ip2nation.com (ip till land) |
||
Svara med citat |
Svara |
|
|