För varje kategori visar du två alternativ, ett tomt alternativ och ett med kategoriinformation:
$category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';
Detta är inuti din loop. Så varje gång din loop itererar, två alternativ kommer att skapas. En tom en och en med din kategori. Jag slår vad om att du bara behöver en tomt alternativ i början av . Jag tror att det här är vad du ville:
// notice we are initializing $category_string with an empty option here
$category_string = '<option value=""></option>';
function build_categories_options($parent, $categories, $level) {
global $category_string;
if (isset($categories[$parent]) && count($categories[$parent])) {
$level .= " - ";
foreach ($categories[$parent] as $category) {
$opt_value = substr($level.$category['catname'],3);
// removed extra empty category and put it in $category_string initialization
$category_string .= '<option value="'.$category['catid'].'">'.$opt_value.'</option>';
build_categories_options($category['catid'], $categories, $level);
}
$level = substr($level, -3);
}
return $category_string;
}
Som @MoeTsao nämnde i kommentarerna, försök att undvika att använda
code>mysql_*
funktioner, eftersom deras användning avskräcks av PHP. Använd istället mysqli_*
eller PDO
.