Untuk setiap kategori, Anda menampilkan dua opsi, opsi kosong dan satu dengan informasi kategori:
$category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';
Ini ada di dalam lingkaran Anda. Jadi setiap kali loop Anda berulang, dua pilihan akan dibuat. Satu kosong dan satu dengan kategori Anda. Saya yakin Anda hanya perlu satu opsi kosong di awal <select>
. Saya pikir ini yang Anda inginkan:
// 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;
}
Juga, seperti yang disebutkan @MoeTsao dalam komentar, cobalah untuk menghindari penggunaan mysql_*
fungsi, karena penggunaannya tidak disarankan oleh PHP. Sebagai gantinya, gunakan mysqli_*
atau PDO
.