Reputation: 7520
My goal is to keep all my array values in another array but I don't know how can I do that. Here's my 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 my sample array output
Array
(
[0] => Array
(
[id] => 53
[ratio] => 100
[status] => C
)
[1] => Array
(
[id] => 57
[ratio] => 100
[status] => I
)
[2] => Array
(
[id] => 60
[ratio] => 1.3157894736842
[status] => I
)
After creating an array the next thing to do is to filter this by getting the ratio.
As you have seen above I have a variable $cost_ratio
, this variable is the one that will filter my array.
Here's the continuation of my code:
//declare a 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 will set my filter*/
/*if temp <= 9, i need to put all of my array that has a 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 the table for displaying my 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 FOR APPROVAL</td>";
echo "<td>WAITING PAYMENT</td>";
echo "</tr>";
echo "<tr>";
echo "<td>10% - 90%</td>";
echo "<td>".$var1."</td>"; <!-- IF ratio has a 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 a 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 what I want to 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 what I want to do but I am having a hard time with that.
Upvotes: 0
Views: 63
Reputation: 11171
You can easily group array by doing like the 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 by ratio
$group = array();
foreach($array as $value) {
$groupIndex = min($value['ratio'] / 10, 9);
$group[$groupIndex][] = $value;
}
var_dump($group);
Here is the 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 that the index 9
means from 90+, 5
means from 50 to 59, and 4
means from 40 to 49. If you are confused with the index convention, here is the full list:
$group[0] <--- from 0 to 9
$group[1] <--- from 10 to 19
$group[2] <--- from 20 to 29
$group[3] <--- from 30 to 39
$group[4] <--- from 40 to 49
$group[5] <--- from 50 to 59
$group[6] <--- from 60 to 69
$group[7] <--- from 70 to 79
$group[8] <--- from 80 to 89
$group[9] <--- from 90+
Upvotes: 1