2017-04-21 160 views
1
foreach ($array_leave_dates as $emp => $leave_type) { 
    foreach ($leave_type as $leave_dates) { 
     if($leave_type == 'Maternity Leave'){ 
     unset($array_leave_dates[$leave_type]); 
     } 
     else{ 
     echo $leave_dates[$row]; 
     } 
    } 
} 

在这里,我们可以获取$ leave_dates并且想要移除或取消设置leave_type =='产假'。但不可能。请帮助指出我上面的代码中的错误。PHP - 从基于值的多维数组中删除元素

+0

显示第一个数组的示例数据! '$ array_leave_dates' Whitout知道更多的尝试'unset($ array_leave_dates [$ emp]);'注意:从哪里来'$ row'? – JustOnUnderMillions

回答

1

不知道你的数据源是什么样子:

<?php 
// Remove the whole employee 
$employees = array(
    'emp1' => array('sick' => 'Mon - Tue'), 
    'emp2' => array('bun in oven' => '2016 - 2017'), 
    'emp3' => array('broken heart' => '2017 - ∞'), 
); 

foreach ($employees as $emp => $leave) { 

    foreach ($leave as $leaveName => $date) { 

     if($leaveName == 'bun in oven') { 
      unset($employees[$emp]); 
     } 
    } 
} 

print_r($employees); 


// OR remove only 'Maternity' from the employee but keep everything else 
<?php 
$employees = array(
    'emp1' => array('sick' => 'Mon - Tue', 'its friday and im not coming in' => 'Fri'), 
    'emp2' => array('bun in oven' => '2016 - 2017', 'sick' => 'Thu'), 
    'emp3' => array('broken heart' => '2017 - ∞'), 
); 

foreach ($employees as $emp => $leave) { 

    foreach ($leave as $leaveName => $date) { 

     if($leaveName == 'bun in oven') { 
      unset($employees[$emp][$leaveName]); 
     } 
    } 
} 

print_r($employees); 
1

看一看的//注释

foreach ($array_leave_dates as $emp => $leave_type) { 
    // you treat $leave_type as array here 
    foreach ($leave_type as $leave_dates) { 
    // you treat $leave_type as string here 
    // doesn't feel right 
    if($leave_type == 'Maternity Leave') { 
    // you are unsetting with a value 
    //unset($array_leave_dates[ --> $leave_type <-- ]); 
    // i assume you want to delete the key 
    unset($array_leave_dates[$emp]); 
    } 
    else{ 
    // $row doesn't seem to exist, looks wrong from here 
    echo $leave_dates[$row]; 
    } 
    } 
} 
0

如果$leave_type可以"Maternity Leave",那你为什么搜索$leave_dates内部的字符串值?这个问题自然是令人反感的。从事实上,你有两个foreach周期,第二个嵌入到第一个让我认为$leave_type是不是你认为它是。所以,我认为你有一个多维数组,其中外键是员工姓名或id,内键是类型。例如:

array(
    'John Doe' => array('Sickness' => array('a', 'b', 'c')), 
    'Mary Doe' => array('Sickness' => array('a', 'b', 'c'), 'Maternal Leave' => array('d', 'e')) 
) 

如果是这样的话,那么你需要修改你的周期:如果你想要一个更通用的解决方案

foreach ($array_leave_dates as $emp => $leave) { 
    if ($leave['Maternity Leave']) { 
     unset($array_leave_dates[$emp]['Maternity Leave']); 
    } 
} 

,那么这可能会帮助您:

function removeByKey(&$arr, $k) { 
    if (arr[$k] !== null) { 
     unset arr[$k]; 
    } 
    foreach($arr as $key => $value) { 
     if (is_array($value)) { 
      $arr[$key] = removeByKey($arr[$key], $k); 
     } 
    } 
    return $arr; 
}