सबसे पहले मेरी खराब अंग्रेजी के लिए खेद है।
आपकी क्वेरी में, id_location . द्वारा ऑर्डर करने के बजाय , घटक के नाम से आदेश दें . इस तरह आप डायनामिक रोस्पैन को आसानी से जोड़ सकते हैं। मैंने आपका कनेक्शन प्रोग्राम नहीं बदला है, लेकिन मैंने आपका दूसरा भाग बदल दिया है। कृपया जांचें। मुझे पता है कि 3 से 4 लूप हैं। लेकिन अगर किसी शरीर को बेहतर अहंकार मिले तो कृपया मुझे बताएं।
$sql1 = "SELECT * FROM Lokasi ORDER BY id_location";
$stmt1 = $dbc->prepare($sql1);
$stmt1->execute();
while ($row1 = $stmt1->fetch(PDO::FETCH_ASSOC)) {
$location++;
echo "Location $location : ".$row1['location'];
?>
<?php
$query = "SELECT *
FROM sub_component,
component
WHERE sub_component.id_component=component.id_component
AND component.id_location='$data[id_location]'
ORDER BY component.component_name";
$stmt = $dbc->prepare($query);
$stmt->execute();
# Declare two emty array
$component = array(); # Will store the components
$sub_component = array(); # Will store the sub components
$loop = 0;
# Now if any data is fetched from previsous query, then fill
# the above declared arrays.
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$component[$loop] = $row['component'];
$sub_component[$loop] = $row['sub_component'];
$loop = $loop + 1;
}
# If no data fetched then I m telling
# No data fetched.
if (!sizeof($component)) {
echo 'Empty Data';
} else {
print "<table width='469px' border='1'>
<tr bgcolor='#00FFFF'>
<th width='109' class='rounded' scope='col'>Component</th>
<th width='109' class='rounded' scope='col'>Sub Component</th>
</tr>";
# Now our main logic starts to print dynamic rowspan
# Go for a loop.
# Here the imporant is to use for loop
$tmp_arr = array();
$main_assoc_arr = array();
for ($i = 0; $i < sizeof($sub_component); $i++) {
array_push($tmp_arr, $sub_component[$i]);
# If we have reached the last element
# and in $main_assoc_arr the comonent is not exist
# Then we will store them as following.
if ( $i = (sizeof($sub_component)-1)
&& !array_key_exists($component[$i], $main_assoc_arr)) {
$main_assoc_arr[ $component[$i] ] = array();
$main_assoc_arr[ $component[$i] ] = $tmp_arr;
# Restore the array.
$tmp_arr = array();
# Also get out of the loop
break;
}
# If the present component is not equal to the
# Next component then
if ($component[$i] != $component[$i+1]) {
$main_assoc_arr[ $component[$i] ] = array();
$main_assoc_arr[ $component[$i] ] = $tmp_arr;
# Restore the array.
$tmp_arr = array();
}
}
# Now we are going to print the table with rowspan.
foreach ($main_assoc_arr as $comp=>$sub_comp) {
$printed = 0;
$rowspan = sizeof($sub_comp);
foreach ($sub_comp as $elm) {
print "<tr>";
# Manke sure that the column will not print
# in each loop as it conatins dynamic array.
if (!$printed) {
print "<td rowspan='$rowspan'>$comp</td>";
}
print "<td>$elm</td>"
print "</tr>";
}
}
print "</table>";
}
?>