How to make this code shorter with while or for loop

I ahve this code below and I was wondering if there is a way to make it shorter

Thanks
while ($i < $allrows)
{
$T_3_1 = mysql_result($alltable, $i, "T_3_1");
$T_3_2 = mysql_result($alltable, $i, "T_3_2");
$T_3_3 = mysql_result($alltable, $i, "T_3_3");
$T_3_4 = mysql_result($alltable, $i, "T_3_4");
$T_3_5 = mysql_result($alltable, $i, "T_3_5");
$T_3_6 = mysql_result($alltable, $i, "T_3_6");
$T_3_7 = mysql_result($alltable, $i, "T_3_7");
$T_4_1 = mysql_result($alltable, $i, "T_4_1");
 
 
 
 
if($T_3_1==1){
$T_3_1_arr[$T_3_1]++;
}
if($T_3_2==1){
$T_3_2_arr[$T_3_2]++;
}
if($T_3_3==1){
$T_3_3_arr[$T_3_3]++;
}
if($T_3_4==1){
$T_3_4_arr[$T_3_4]++;
}
if($T_3_5==1){
$T_3_5_arr[$T_3_5]++;
}
if($T_3_6==1){
$T_3_6_arr[$T_3_6]++;
}
if($T_3_7==1){
$T_3_7_arr[$T_3_7]++;
}
if($T_4_1==1){
$T_4_1_arr[$T_4_1]++;
}
 
$i++;
 
 
}//closing while loop
 
// calculating the first page
 
$T_3_1trows = $allrows - $T_3_1[1];
$T_3_1pre = ($T_3_1_arr[1] / $allrows) * 100;
$T_3_1n = number_format($T_3_1pre, 2)." %";
 
$T_3_2trows = $allrows - $T_3_2[1];
$T_3_2pre = ($T_3_2_arr[1] / $allrows) * 100;
$T_3_2n = number_format($T_3_2pre, 2)." %";
 
$T_3_3trows = $allrows - $T_3_3[1];
$T_3_3pre = ($T_3_3_arr[1] / $allrows) * 100;
$T_3_3n = number_format($T_3_3pre, 2)." %";

Open in new window

LVL 9
syedasimmeesaqAsked:
Who is Participating?
 
Beverley PortlockConnect With a Mentor Commented:
I lack data to test it, but something along these lines might do it
<?php
 
function checkValue( & $arr, $val, $i, $alltable ) {
     $v = mysql_result( $alltable, $i, $val );
     if ( $v == 1 )
          $arr[1]++;
}
 
 
while ($i < $allrows) {
 
     checkValue( $T_3_1_arr, "T_3_1", $i, $alltable );
     checkValue( $T_3_2_arr, "T_3_2", $i, $alltable );
     checkValue( $T_3_3_arr, "T_3_2", $i, $alltable );
     checkValue( $T_3_4_arr, "T_3_2", $i, $alltable );
     checkValue( $T_3_5_arr, "T_3_2", $i, $alltable );
     checkValue( $T_3_6_arr, "T_3_2", $i, $alltable );
     checkValue( $T_3_7_arr, "T_3_2", $i, $alltable );
     checkValue( $T_4_1_arr, "T_4_1", $i, $alltable );
 
	$i++;
 
} //closing while loop
 
// calculating the first page
 
$T_3_1trows = $allrows - $T_3_1[1];
$T_3_1pre = ($T_3_1_arr[1] / $allrows) * 100;
$T_3_1n = number_format($T_3_1pre, 2) . " %";
 
$T_3_2trows = $allrows - $T_3_2[1];
$T_3_2pre = ($T_3_2_arr[1] / $allrows) * 100;
$T_3_2n = number_format($T_3_2pre, 2) . " %";
 
$T_3_3trows = $allrows - $T_3_3[1];
$T_3_3pre = ($T_3_3_arr[1] / $allrows) * 100;
$T_3_3n = number_format($T_3_3pre, 2) . " %";
?>

Open in new window

0
 
Beverley PortlockCommented:
LOL - just noticed that I missed some stuff on the cut'n'paste. The middle section should be

     checkValue( $T_3_3_arr, "T_3_3", $i, $alltable );
     checkValue( $T_3_4_arr, "T_3_4", $i, $alltable );
     checkValue( $T_3_5_arr, "T_3_5", $i, $alltable );
     checkValue( $T_3_6_arr, "T_3_6", $i, $alltable );
     checkValue( $T_3_7_arr, "T_3_7", $i, $alltable );
 
0
 
ycTINCommented:
many statement are waste in you code

if($T_4_1==1){
   $T_4_1_arr[$T_4_1]++; //$T_4_1  = 1
}


:) shortest code:

<?php
$collection = array("T_3_1","T_3_2","T_3_3","T_3_4","T_3_5","T_3_6","T_3_7","T_4_1");
while ($i < $allrows) foreach ($collection as $key) if (1 == mysql_result($alltable, $i++, $key)) @${$key."_arr"}[1]++;
?>

Open in new window

0
 
Ray PaseurCommented:
Those repeated numbers in the variable names indicate to me that this might be a good place to use a multidimensional array instead of explicitly coded scalar variable names.  Just a thought.  

Also, have a look at the code snippet.  If I understand correctly, you have just done a MySQL query where you returned a results set containing columns named like T_3_1, T_3_2, etc.  The two segments below are likely to give equivalent results, and the latter will be substantially faster.

HTH, ~Ray
// FROM THE OP
$T_3_1 = mysql_result($alltable, $i, "T_3_1");
$T_3_2 = mysql_result($alltable, $i, "T_3_2");
$T_3_3 = mysql_result($alltable, $i, "T_3_3");
$T_3_4 = mysql_result($alltable, $i, "T_3_4");
$T_3_5 = mysql_result($alltable, $i, "T_3_5");
$T_3_6 = mysql_result($alltable, $i, "T_3_6");
$T_3_7 = mysql_result($alltable, $i, "T_3_7");
$T_4_1 = mysql_result($alltable, $i, "T_4_1");
 
// AN ALTERNATIVE
$row = mysql_fetch_assoc($alltable);
extract($row);

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.