php - How to create a multidimensional array out of an array and perform a filtering? -
my goal keep array values in array don't know how can that. here's simple array:
$grand_total = $total + $cost; $cost_ratio = ($cost/$grand_total) * 100; $paid_ratio = ($total/$grand_total) * 100; $info[] = array( 'id' => $data['id'], 'ratio' => $cost_ratio, 'status' => $status );
here's sample array output
array ( [0] => array ( [id] => 53 [ratio] => 100 [status] => c ) [1] => array ( [id] => 57 [ratio] => 100 [status] => ) [2] => array ( [id] => 60 [ratio] => 1.3157894736842 [status] => )
after creating array next thing filter getting ratio. have seen above have variable $cost_ratio
, variable 1 filter array.
here's continuation of code:
//declare variable $var1 = 0; $var2 = 0; $var3 = 0; $var4 = 0; $var5 = 0; $var6 = 0; $var7 = 0; $var8 = 0; $var9 = 0; $var10 = 0;
after that
for($x = 0; $x < sizeof($info); $x++){ $status_info = $info[$x]['status']; $temp = $info[$x]['ratio']; /*this set filter*/ /*if temp <= 9, need put of array has ratio <= 9*/ if($temp <= 9){ $var1++; }else if($temp <= 19){ $var2++; }else if($temp <= 29){ $var3++; }else if($temp <= 39){ $var4++; }else if($temp <= 49){ $var5++; }else if($temp <= 59){ $var6++; }else if($temp <= 69){ $var7++; }else if($temp <= 79){ $var8++; }else if($temp <= 89){ $var9++; }else{ $var10++; } }
and lastly table displaying records
echo "<table border='1'>"; echo "<tr>"; echo "<td>percentage range</td>"; echo "<td>volume</td>"; echo "<td>ratio</td>"; echo "<td>backordered</td>"; echo "<td>canceled</td>"; echo "<td>cod approved</td>"; echo "<td>cod pending</td>"; echo "<td>cod shipped</td>"; echo "<td>completed</td>"; echo "<td>declined</td>"; echo "<td>failed</td>"; echo "<td>fraud checking</td>"; echo "<td>paid & waiting shipping</td>"; echo "<td>pending</td>"; echo "<td>shipped</td>"; echo "<td>test</td>"; echo "<td>waiting approval</td>"; echo "<td>waiting payment</td>"; echo "</tr>"; echo "<tr>"; echo "<td>10% - 90%</td>"; echo "<td>".$var1."</td>"; <!-- if ratio has value between 1 - 9 go here --> echo "<td></td>"; echo "<td>".$x1."</td>"; echo "<td>".$x2."</td>"; echo "<td>".$x3."</td>"; echo "<td>".$x4."</td>"; echo "<td>".$x5."</td>"; echo "<td>".$x6."</td>"; echo "<td>".$x7."</td>"; echo "<td>".$x8."</td>"; echo "<td>".$x9."</td>"; echo "<td>".$x10."</td>"; echo "<td>".$x11."</td>"; echo "<td>".$x12."</td>"; echo "<td>".$x13."</td>"; echo "<td>".$x14."</td>"; echo "<td>".$x15."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>20% - 80%</td>"; <!-- if ratio has value between 10 - 19 go here --> echo "<td>".$var2."</td>"; echo "<td></td>"; echo "<td>".$x1."</td>"; echo "<td>".$x2."</td>"; echo "<td>".$x3."</td>"; echo "<td>".$x4."</td>"; echo "<td>".$x5."</td>"; echo "<td>".$x6."</td>"; echo "<td>".$x7."</td>"; echo "<td>".$x8."</td>"; echo "<td>".$x9."</td>"; echo "<td>".$x10."</td>"; echo "<td>".$x11."</td>"; echo "<td>".$x12."</td>"; echo "<td>".$x13."</td>"; echo "<td>".$x14."</td>"; echo "<td>".$x15."</td>"; echo "</tr>"; . .
here's want do:
[ratio between 1 - 9 value] = array( [0] = array( 'id' => 1, 'status' => 'c' ), [1] = array( 'id' => 3, 'status' => 'd' ), [2] = array( 'id' => 6, 'status' => 'j' ), ), [ratio between 10 - 19 value] = array( [0] = array( 'id' => 1, 'status' => 'c' ), [1] = array( 'id' => 3, 'status' => 'd' ), [2] = array( 'id' => 6, 'status' => 'j' ), ), . . .
that's want having hard time that.
you can group array doing following:
$array = array( array( 'id' => 53, 'ratio' => 100, 'status' => 'i'), array( 'id' => 54, 'ratio' => 50, 'status' => 'c'), array( 'id' => 56, 'ratio' => 42, 'status' => 'd') ); // grouping array ratio $group = array(); foreach($array $value) { $groupindex = min($value['ratio'] / 10, 9); $group[$groupindex][] = $value; } var_dump($group);
here sample output
array (size=3) 9 => array (size=1) 0 => array (size=3) 'id' => int 53 'ratio' => int 100 'status' => string 'i' (length=1) 5 => array (size=1) 0 => array (size=3) 'id' => int 54 'ratio' => int 50 'status' => string 'c' (length=1) 4 => array (size=1) 0 => array (size=3) 'id' => int 56 'ratio' => int 42 'status' => string 'd' (length=1)
noted index 9
means 90+, 5
means 50 59, , 4
means 40 49. if confused index convention, here full list:
$group[0] <--- 0 9 $group[1] <--- 10 19 $group[2] <--- 20 29 $group[3] <--- 30 39 $group[4] <--- 40 49 $group[5] <--- 50 59 $group[6] <--- 60 69 $group[7] <--- 70 79 $group[8] <--- 80 89 $group[9] <--- 90+
Comments
Post a Comment