php数组过滤数据插入到mysql

i had prepared below form, i need data insert to mysql through this form but problem is when i try to insert array_filter gives problem. I need only selected box values data to mysql.

example: when user selected select box 1st row and 5th row only these two rows should insert to mysql, instead of this 5 rows inserting with empty values remain data also inserting. please help

<form action="array-act.php" method="post">
<table width="500" border="0">
<tr>
<td><input name="name[]" value="One" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]"  value="Two" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Three" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Four" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
<tr>
<td><input name="name[]" value="Five" type="text" /></td>
<td><input name="marks[]" type="text" /></td>
<td><input name="grade[]" type="text" /></td>
<td><select name="first[]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>
</tr>
</table>
<input name="Go" type="submit" />
</form>
<?php
$name = $_POST['name'];
$marks = $_POST['marks'];
$grade = $_POST['grade'];
$option = array_values(array_filter($_POST['first']));


$n = count($option);
for ($i = 0; $i < $n; $i++) 
{
$query = "INSERT INTO `table` (`name`, `marks`, `grade`, `option`) 
VALUES ('$name[$i]', '$marks[$i]', '$grade[$i]', '$option[$i]')"; 
// Here you must execute your query
$result = mysql_query($query) or die('Failed to connect to server: ' . mysql_error());
}
if($result)
{
echo "Data  Inserted";
}
else
{
echo "Data Not Inserted";
}
?>

I think you should give numbers to the name attribute of the elements of each row

<td><input name="name[1]" value="One" type="text" /></td>
<td><input name="marks[1]" type="text" /></td>
<td><input name="grade[1]" type="text" /></td>
<td><select name="first[1]"><option value="">Select</option><option value="SM">SM</option><option value="QB">QB</option></select></td>

and so on.

That would solve your problem. Right now each option list has the same name, so only one should be returned.

Although I can't see anything wrong with your original code, try this instead:

$name = $_POST['name'];
$marks = $_POST['marks'];
$grade = $_POST['grade'];
$first = $_POST['first'];
array_walk($first, 'insert');

function insert($v, $i) {
    if ($v !== "") {
        $query = "INSERT INTO `table` (`name`, `marks`, `grade`, `option`) VALUES ('$name[$i]', '$marks[$i]', '$grade[$i]', '$option[$i]')"; 
        $result = mysql_query($query) or die('Failed to connect to server: ' . mysql_error());
        if($result) {
            echo "Data  Inserted";
        } else {
            echo "Data Not Inserted";
        }
    }
}

The code is correct. Only problem is in line :

 $option = array_values(array_filter($_POST['first']));

Here it looses the key indexes and re-index it. This is due to array_values.