我有两个关联数组,然后我想将两个索引与状态进行比较,如果状态被删除,则必须删除整行。
我已经尝试了这段代码,但是它给了我一些错误。我必须比较$employee
和$employee_status
数组的索引以及状态$employee_status
,如果状态为Delete
,然后我必须从$employee
数组中删除整行
$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_status = array
(
1=>
array("employee_id"=>1, "status"=>"Active"
)
,
7=>
array("employee_id"=>2, "status"=>"Delete"
)
,
11=>
array("employee_id"=>11, "status"=>"Delete"
)
,
10=>
array("employee_id"=>10, "status"=>"Active"
)
,
);
foreach($employee as &$emp1){
foreach($employee_status as $emp2){
if($emp1['employee_id'] == $emp2['employee_id'] && $emp2["status"]=="Delete"){
unset($emp1['employee_id']);
}
}
}
foreach($employee as $eee)
{
print_r($eee);
}
答案 0 :(得分:0)
尝试这样:
foreach($employee as $k => $emp1){
foreach($employee_status as $emp2){
if($emp1['employee_id'] == $emp2['employee_id'] && $emp2["status"]=="Delete"){
unset($employee[$k]);
}
}
}
我认为问题在于您迭代并通过引用(&sign)使用了数组以同时取消设置元素。
答案 1 :(得分:0)
这使用$employee_status
数组的键来标识员工,为此,我将第二个键7=>
更正为2=>
。然后,您可以只使用employee数组中的employee_id
来找到相应的状态。还使用employee数组的索引从数组中删除项目...
$employee_status = array
(
1=>
array("employee_id"=>1, "status"=>"Active"
)
,
2=>
array("employee_id"=>2, "status"=>"Delete"
)
,
11=>
array("employee_id"=>11, "status"=>"Delete"
)
,
10=>
array("employee_id"=>10, "status"=>"Active"
)
,
);
foreach($employee as $index => $emp1){
if(isset($employee_status[$emp1['employee_id']])
&& $employee_status[$emp1['employee_id']]["status"]=="Delete"){
unset($employee[$index]);
}
}
如果无法直接更改$employee_status
数组,则可以使用array_column()
$employee_status = array_column($employee_status, null, "employee_id");
您也可以使用array_filter()
,但是恕我直言,此解决方案非常简单。但是为了完整性...
$employee_status = array_column($employee_status, null, "employee_id");
$employee = array_filter($employee, function ($emp) use ($employee_status){
return (!isset($employee_status[$emp['employee_id']])
|| $employee_status[$emp['employee_id']]["status"]!="Delete");
});
答案 2 :(得分:0)
您可以简单地使用array_walk
$keepActive = [];
$empStatus = array_column($employee_status, 'status','employee_id');
array_walk($employee, function($v, $k) use ($empStatus, &$keepActive){
$condition = array_key_exists($v['employee_id'], $empStatus) && ($empStatus[$v['employee_id']] == 'Delete');
if(!$condition)
$keepActive[$k] = $v;
});
答案 3 :(得分:-1)
$employee_status_col = array_column($employee_status, 'employee_id');
foreach($employee as $emp_key => $emp_row){
$employee_id = $emp_row['employee_id'];
$key = array_search($employee_id, $employee_status_col);
if($key !== false){
$status = $employee_status[$key]['status'];
if($status == 'Delete'){
//remove from the array
unset($employee[$emp_key])
}
}
}