Reputation: 128
I need to prepare a script in php please help me creating such
$a=50;
$b=40;
$c=80;
$d=20;
$e=60;
$total=$a+$b+$c+$d+$e // i.e 250
$avg=($a+$b+$c+$d+$e)/5; //i.e 50
means every elements need to have 50 points
I have created two arrays i)who will recieve ii)who will pay now what i need is to display a message
1)$a do not need to give or recieve any point
/* payer */
a)$b need to give 10 points to $e.
b)$d need to give 30 points to $c.
/* payer */
/* reciever*/
a)$c will recieve 30 points from $d.
b)$e will recieve 10 points from $b.
/* reciever*/
now i am stucked how to create logic to display such message. please help by suggesting me or giving me some idea to do this currently there are 5 elements it may be more than that(can be dynamic).
Upvotes: 1
Views: 128
Reputation: 1212
Please find following, it may help you:
<?php
/*
$a=50;
$b=40;
$c=80;
$d=20;
$e=80;
$total=$a+$b+$c+$d+$e; // i.e 250
$avg=($a+$b+$c+$d+$e)/5; //i.e 50
*/
// My code start from here
$payer_array = array();
$receiver_array = array();
$element_array = array('a'=>50, 'b'=>40, 'c'=>80, 'd'=>20, 'e'=>50);
$total_element=count($element_array);
$total = array_sum($element_array);
$avg = $total/$total_element;
foreach($element_array as $name=>$payer_value) {
if($payer_value>=$avg) {
$payer_array[$name] = ($payer_value-$avg);
}
else {
$receiver_array[$name] = ($avg-$payer_value);
}
}
foreach ($payer_array as $name=>$payer_value) {
if ($payer_value==0) {
echo "$name do not need to give or receive any point</br>";
}
else {
// exact match
if (in_array($payer_value, $receiver_array)) {
$match_reciever_name = array_search($payer_value, $receiver_array);
echo "$name need to give $payer_value points to $match_reciever_name<br/>";
unset($receiver_array[$match_reciever_name]);
}
// partial match
else {
foreach($receiver_array as $reciever_name=>$reciever_value) {
if($payer_value>0) {
if($reciever_value > $payer_value) {
$recieverd_value = $payer_value;
echo "$name need to give $recieverd_value points to $reciever_name<br/>";
$receiver_array[$reciever_name] = $reciever_value-$recieverd_value;
$payer_value = 0;
if($receiver_array[$reciever_name]==0) {
unset($receiver_array[$reciever_name]);
}
break;
}
else {
$recieverd_value = $reciever_value;
echo "$name need to give $recieverd_value points to $reciever_name<br/>";
unset($receiver_array[$reciever_name]);
$payer_value = $payer_value-$reciever_value;
}
}
}
}
}
}
?>
Upvotes: 1