I want to add salary key in $employee array from $employee_salary array, both the arrays are associative and the the salary is to added to only according to index.There are some errors of undefined offset.I am not able to recognize the problem.The errors is like undefined offset.What will be the problem?
$employee = array
(
0=>
array("employee_id"=>1, "firstName"=>"Zahir", "lastName"=>"Alam", "Age"=>25, "Company"=>"Switchme", "Role"=>"Developer", "Department"=>"Tech"
,"Head"=>
array("Id"=>3 , "Name"=>"Sourasis Roy")
)
,
1=>
array("employee_id"=>2, "firstName"=>"Amith", "lastName"=>"Manniken", "Age"=>25, "Company"=>"Switchme", "Role"=>"Developer", "Department"=>"Tech"
,"Head"=>
array("Id"=>3 , "Name"=>"Sourasis Roy")
)
,
2=>
array("employee_id"=>3, "firstName"=>"Sourasis", "lastName"=>"Roy", "Age"=>28, "Company"=>"Switchme", "Role"=>"CTO")
,
3=>
array("employee_id"=>4, "firstName"=>"Aditya", "lastName"=>"Mishra", "Age"=>29, "Company"=>"Switchme", "Department"=>"Tech", "Role"=>"CEO")
,
4=>
array("employee_id"=>5, "firstName"=>"Priti", "lastName"=>"Lata", "Age"=>24, "Company"=>"Switchme", "Role"=>"HR")
,
5=>
array("employee_id"=>6, "firstName"=>"Sumita", "lastName"=>"Nath", "Age"=>24, "Company"=>"Switchme", "Role"=>"HLA Head", "Department"=>"Crm")
,
6=>
array("employee_id"=>7, "firstName"=>"Tarini", "lastName"=>"Khanna", "Age"=>22, "Company"=>"Switchme", "Role"=>"Content Writer")
,
7=>
array("employee_id"=>8, "firstName"=>"Abhisek", "lastName"=>"Soni", "Age"=>23, "Company"=>"Switchme", "Role"=>"HLA", "Department"=>"Crm","Head"=>array("Id"=>5 , "Name"=>"Sumita Nath")
)
,
8=>
array("employee_id"=>9, "firstName"=>"Ankit", "lastName"=>"Pump", "Age"=>23, "Company"=>"Switchme", "Role"=>"HLA", "Department"=>"Crm"
,"Head"=>
array("Id"=>5 , "Name"=>"Sumita Nath")
)
,
9=>
array("employee_id"=>10, "firstName"=>"Pogo", "lastName"=>"Laal", "Age"=>23, "Company"=>"Switchme", "Role"=>"Designer")
,
10=>
array("employee_id"=>11, "firstName"=>"Sabina", "lastName"=>"Sekh", "Age"=>28, "Company"=>"Switchme", "Role"=>"HLA Head", "Department"=>"Crm")
,
11=>
array("employee_id"=>12, "firstName"=>"Sanjay", "lastName"=>"Poudal", "Age"=>24, "Company"=>"Switchme", "Role"=>"HLA Head", "Department"=>"Crm"
,"Head"=>
array("Id"=>10 , "Name"=>"Sabina Sekh")
)
,
);
$employee_salary = array
(
7=>
array("employee_id"=>7, "salary"=>"55,000"
)
,
2=>
array("employee_id"=>2, "salary"=>"60,000"
)
,
9=>
array("employee_id"=>9, "salary"=>"50,000"
)
,
10=>
array("employee_id"=>10, "salary"=>"30,000"
)
,
);
$ar= array();
for($j=0;$j<count($employee);$j++)
{
if($employee[$j]==$employee_salary[$j])
{
$ar=$employee[$j]+$employee_salary[$j];
print_r($ar);
echo "<br>";
}
}
If you could notice, both $employee[$j]
and $employee_salary[$j]
are arrays, so you should not do equal to comparison between them. Plus, both $employee
and $employee_salary
arrays are not of same size, that's why you are getting undefined index error while doing $employee_salary[$j]
in the for
loop.
Use nested foreach
loops along with reference to achieve the desired result, like this:
foreach($employee as &$emp1){
foreach($employee_salary as $emp2){
if($emp1['employee_id'] == $emp2['employee_id']){
$emp1['salary'] = $emp2['salary'];
}
}
}
// Display complete array structure of $employee
var_dump($employee);
Make both indexed on employee id with array_column and loop the salaries and add the value to employee array with the same key.
$employee = array_column($employee, null, "employee_id");
$employee_salary = array_column($employee_salary, "salary", "employee_id");
foreach($employee_salary as $key => $v){
$employee[$key]['salary'] = $v;
}
var_dump($employee);
You can simply use array_walk
$emp_s = array_column($employee_salary, 'salary','employee_id');
array_walk($employee, function(&$v, $k) use ($emp_s){
if(array_key_exists($k, $emp_s)){
$v['salary'] = $emp_s[$k];
}
});
OR
$temp = array_column($employee_salary, 'salary','employee_id');
array_walk($employee, function(&$v, $k) use ($temp){
$v['salary'] = array_key_exists($k, $temp) ? $temp[$k] : null;
});