Reputation: 341
I have an array of the list of employee with employees ID say $listEmployees
is the array name.
I have another array data about the list of allowances and deductions of any company(This is just the list) say it as $listAllowances
.
Now I have last array of data about the list of Allowances and Deductions which is assigned to employees of $listEmployees
say it as $listEmpAllowances
.
$listEmpAllowances
has data as follows:
Array
(
[0] => Array
(
[EmployeeID] => 3
[AllowanceID] => 1
[IsAllowance] => 0
[AllowanceTitle] => PF
[AllowanceAmount] => 2000
)
[1] => Array
(
[EmployeeID] => 6
[AllowanceID] => 2
[IsAllowance] => 0
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 1666
)
[2] => Array
(
[EmployeeID] => 26
[AllowanceID] => 6
[IsAllowance] => 0
[AllowanceTitle] => Allowance
[AllowanceAmount] => 1000
)
[3] => Array
(
[EmployeeID] => 3
[AllowanceID] => 4
[IsAllowance] => 0
[AllowanceTitle] => Grade
[AllowanceAmount] => 1000
)
[4] => Array
(
[EmployeeID] => 5
[AllowanceID] => 5
[IsAllowance] => 0
[AllowanceTitle] => Incentive
[AllowanceAmount] => 1000
)
[5] => Array
(
[EmployeeID] => 5
[AllowanceID] => 6
[IsAllowance] => 0
[AllowanceTitle] => Bonus
[AllowanceAmount] => 1000
)
[6] => Array
(
[EmployeeID] => 5
[AllowanceID] => 7
[IsAllowance] => 1
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 4000
)
[7] => Array
(
[EmployeeID] => 3
[AllowanceID] => 8
[IsAllowance] => 1
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 200
)
[8] => Array
(
[EmployeeID] => 51
[AllowanceID] => 1
[IsAllowance] => 0
[AllowanceTitle] => PF
[AllowanceAmount] => 1200
)
[9] => Array
(
[EmployeeID] => 51
[AllowanceID] => 3
[IsAllowance] => 0
[AllowanceTitle] => Allowance
[AllowanceAmount] => 1000
)
[10] => Array
(
[EmployeeID] => 51
[AllowanceID] => 5
[IsAllowance] => 0
[AllowanceTitle] => Incentive
[AllowanceAmount] => 1000
)
[11] => Array
(
[EmployeeID] => 51
[AllowanceID] => 7
[IsAllowance] => 1
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 2400
)
)
Now, What is need is for each employees I need to check whether or not any allowances and deductions($listAllowances
) is assigned to any employee in($listEmployees
). If it is assigned I need the title and amount of the assigned Allowance to the employee. If any title of $listAllowances
is not assigned to any employee then I need the title and the amount needs to be 0
.
I tried doing this as Follows.
foreach($listEmployees as $key => $listEmployee)
{
$EmpID = $listEmployee['EmployeeID'];
GetAllowance($listEmpPayrolls, $EmpID, $listAllowances);
}
function GetAllowance($PayrollArray, $EmployeeID, $listAllowances)
{
$ArrayForThisEmp = array();
foreach($listAllowances as $key => $list){
$AllowanceTitle = strtolower($list['Title']);
foreach($PayrollArray as $key => $pay){
if($pay['EmployeeID'] == $EmployeeID){
if (strtolower($pay['AllowanceTitle']) == $AllowanceTitle)
{
$ArrayForThisEmp[] = $pay;
}
if(strtolower($pay['AllowanceTitle']) != $AllowanceTitle)
{
$ArrayForThisEmp[] =array("EmployeeID" =>$EmployeeID, "AllowanceTitle" => $pay['AllowanceTitle'], "AllowanceAmount" => 0);
}
}
}
}
echo "<pre>"; print_r($ArrayForThisEmp);
echo "---------------------END------------------";
}
Now, What can I do to get the result as I needed.
Upvotes: 2
Views: 97
Reputation: 4738
Give this a shot:
<?php
$listEmployees = array_map(function($n) { return ['EmployeeID' => "$n"]; }, range(1, 100) );
$listEmpPayrolls = array_map(function($n) { return ['EmployeeID' => "$n"]; }, range(1, 100) );
$listAllowances = [
['AllowanceID' => '1','IsAllowance' => '0','AllowanceTitle' => 'PF'],
['AllowanceID' => '2','IsAllowance' => '0','AllowanceTitle' => 'Gratuity'],
['AllowanceID' => '3','IsAllowance' => '0','AllowanceTitle' => 'Allowance'],
['AllowanceID' => '4','IsAllowance' => '0','AllowanceTitle' => 'Grade'],
['AllowanceID' => '5','IsAllowance' => '0','AllowanceTitle' => 'Incentive'],
['AllowanceID' => '6','IsAllowance' => '0','AllowanceTitle' => 'Bonus'],
['AllowanceID' => '7','IsAllowance' => '1','AllowanceTitle' => 'PF Deduction'],
['AllowanceID' => '8','IsAllowance' => '1','AllowanceTitle' => 'SST Deduction']
];
$listEmpAllowances = [
['EmployeeID' => '3','AllowanceID' => '1','IsAllowance' => '0','AllowanceTitle' => 'PF','AllowanceAmount' => '2000'],
['EmployeeID' => '6','AllowanceID' => '2','IsAllowance' => '0','AllowanceTitle' => 'Gratuity','AllowanceAmount' => '1666'],
['EmployeeID' => '26','AllowanceID' => '6','IsAllowance' => '0','AllowanceTitle' => 'Allowance','AllowanceAmount' => '1000'],
['EmployeeID' => '3','AllowanceID' => '4','IsAllowance' => '0','AllowanceTitle' => 'Grade','AllowanceAmount' => '1000'],
['EmployeeID' => '5','AllowanceID' => '5','IsAllowance' => '0','AllowanceTitle' => 'Incentive','AllowanceAmount' => '1000'],
['EmployeeID' => '5','AllowanceID' => '6','IsAllowance' => '0','AllowanceTitle' => 'Bonus','AllowanceAmount' => '1000'],
['EmployeeID' => '5','AllowanceID' => '7','IsAllowance' => '1','AllowanceTitle' => 'PF Deduction','AllowanceAmount' => '4000'],
['EmployeeID' => '3','AllowanceID' => '8','IsAllowance' => '1','AllowanceTitle' => 'SST Deduction','AllowanceAmount' => '200'],
['EmployeeID' => '51','AllowanceID' => '1','IsAllowance' => '0','AllowanceTitle' => 'PF','AllowanceAmount' => '1200'],
['EmployeeID' => '51','AllowanceID' => '3','IsAllowance' => '0','AllowanceTitle' => 'Allowance','AllowanceAmount' => '1000'],
['EmployeeID' => '51','AllowanceID' => '5','IsAllowance' => '0','AllowanceTitle' => 'Incentive','AllowanceAmount' => '1000'],
['EmployeeID' => '51','AllowanceID' => '7','IsAllowance' => '1','AllowanceTitle' => 'PF Deduction','AllowanceAmount' => '2400'],
];
function getEmployeeIds()
{
global $listEmployees;
return array_map(function($emp){ return $emp['EmployeeID']; },$listEmployees);
}
function searchForEmployee($id)
{
global $listEmpAllowances;
return array_filter($listEmpAllowances, function($emp) use ($id){return $emp['EmployeeID'] == $id;});
}
function getEmployeeAllowances($id)
{
global $listAllowances;
$infoArray = searchForEmployee($id);
$out = [];
foreach($listAllowances as $a)
{
$employeeContainsAllowanceTitle = false;
foreach($infoArray as $info)
{
if( strtolower($a['AllowanceTitle']) == strtolower($info['AllowanceTitle']) )
{
$out[] = $info;
$employeeContainsAllowanceTitle = true;
}
}
if(!$employeeContainsAllowanceTitle)
{
$out[] = ["EmployeeID" =>$id, "AllowanceTitle" => $a['AllowanceTitle'], "AllowanceAmount" => 0];
}
}
return $out;
}
foreach(getEmployeeIds() as $id)
{
print_r(getEmployeeAllowances($id));
}
Upvotes: 1
Reputation: 341
Here is the difficulty I faced. At a single round I got one useful value and other unused as below.
Array
(
[3] => Array
(
[0] => Array
(
[EmployeeID] => 3
[AllowanceID] => 1
[IsAllowance] => 0
[AllowanceTitle] => PF
[AllowanceAmount] => 2000
)
[1] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[2] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[3] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[4] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[5] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[6] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[7] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[8] => Array
(
[EmployeeID] => 3
[AllowanceID] => 2
[IsAllowance] => 0
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 1666
)
[9] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[10] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[11] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[12] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[13] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[14] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[15] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[16] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[17] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[18] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[19] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[20] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[21] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[22] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[23] => Array
(
[EmployeeID] => 3
[AllowanceID] => 4
[IsAllowance] => 0
[AllowanceTitle] => Grade
[AllowanceAmount] => 1000
)
[24] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[25] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[26] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[27] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[28] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[29] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[30] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[31] => Array
(
[EmployeeID] => 3
[AllowanceID] => 5
[IsAllowance] => 0
[AllowanceTitle] => Incentive
[AllowanceAmount] => 1000
)
[32] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[33] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[34] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[35] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[36] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[37] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[38] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[39] => Array
(
[EmployeeID] => 3
[AllowanceID] => 6
[IsAllowance] => 0
[AllowanceTitle] => Bonus
[AllowanceAmount] => 1000
)
[40] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[41] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[42] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[43] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[44] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[45] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[46] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[47] => Array
(
[EmployeeID] => 3
[AllowanceID] => 7
[IsAllowance] => 1
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 4000
)
[48] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 0
)
[49] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF
[AllowanceAmount] => 0
)
[50] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Gratuity
[AllowanceAmount] => 0
)
[51] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Grade
[AllowanceAmount] => 0
)
[52] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Incentive
[AllowanceAmount] => 0
)
[53] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => Bonus
[AllowanceAmount] => 0
)
[54] => Array
(
[EmployeeID] => 3
[AllowanceTitle] => PF Deduction
[AllowanceAmount] => 0
)
[55] => Array
(
[EmployeeID] => 3
[AllowanceID] => 8
[IsAllowance] => 1
[AllowanceTitle] => SST Deduction
[AllowanceAmount] => 200
)
)
)
---------------------END------------------
Upvotes: 0
Reputation: 1786
Change
From - $ArrayForThisEmp[] = $pay;
to - $ArrayForThisEmp[$EmployeeID][] = $pay;
From - $ArrayForThisEmp[] =array("EmployeeID" =>$EmployeeID, "AllowanceTitle" => $pay['AllowanceTitle'], "AllowanceAmount" => 0);
To - $ArrayForThisEmp[$EmployeeID][] =array("EmployeeID" =>$EmployeeID, "AllowanceTitle" => $pay['AllowanceTitle'], "AllowanceAmount" => 0);
So, it will lloks like below,
function GetAllowance($PayrollArray, $EmployeeID, $listAllowances)
{
$ArrayForThisEmp = array();
foreach($listAllowances as $key => $list){
$AllowanceTitle = strtolower($list['Title']);
foreach($PayrollArray as $key => $pay){
if($pay['EmployeeID'] == $EmployeeID){
if (strtolower($pay['AllowanceTitle']) == $AllowanceTitle)
{
$ArrayForThisEmp[$EmployeeID][] = $pay;
}
if(strtolower($pay['AllowanceTitle']) != $AllowanceTitle)
{
$ArrayForThisEmp[$EmployeeID][] =array("EmployeeID" =>$EmployeeID, "AllowanceTitle" => $pay['AllowanceTitle'], "AllowanceAmount" => 0);
}
}
}
}
echo "<pre>"; print_r($ArrayForThisEmp);
echo "---------------------END------------------";
}
So, you will get a employee wise array. Count of that array will give you the result that employees has whether or not any allowances and deductions($listAllowances) is assigned to any employee in($listEmployees).
Upvotes: 0