如果Else Echo JSON数组检查

时间:2015-11-20 05:38:24

标签: php arrays sorting if-statement

我有一个JSON数组,我从每个$vars中提取值。在JSON数据中将是我正在寻找的一些关键词。我有一个if else看起来像:

(演示目的)

if( $FullName == $Data[$c]['manager'] $FullName == $Data[$c]['leader'] || $FullName == $Data[$c]['helper']) {
    $cheapLabor = 'NO';
} else {
    $cheapLabor = 'YES';
}

然而,这很有用,现在我想更具体地定义一些状态点上的if else点,这些点代表了他们的雇佣状态。每个Emp Status都基于一个组。

我需要从食物链的顶部检查,然后向下检查是否status = x。如果是,那么$cheapLabor = 'y'; else $cheapLabor = 'z';

我尝试过这样做,但我似乎无法让它发挥作用。以下是我的工作内容:

$repData = json_decode($json, TRUE);    
$c = 0;
$var = $repData[$c]['column'];

if($FullName == $repData[$c]['ceo']) {
    $groups = '[13]';
} else {
    $groups = '[5]';
}                                                   

if($FullName == $repData[$c]['director']) {
    $groups = '[10]';
} else {
    $groups = '[5]';
}

if($FullName == $repData[$c]['regional']) {
    $groups = '[9]';
} else {
    $groups = '[5]';
}   

if($FullName == $repData[$c]['project_manager']) {
    $groups = '[8]';
} else {
    $groups = '[]';
}   

if($FullName == $repData[$c]['team_leader']) {
    $groups = '[6]';
} else {
    $groups = '[5]';
}   

if($FullName == $repData[$c]['rae']) {
    $groups = '[5]';
} else {
    $staus = '[5]';
}

Shomz回答部分工作......

$groups = '[4]'; // new hire group default, to be overwritten if a user has the correct title within Table.
$roleGroups = array(
                    'regional' => '[7]',
                    'team_leader' => '[6]',
                    'RAE' => '[5]'                  
                    );  
foreach ($roleGroups as $role => $groups) {  // go through all the Position Titles
    if ($FullName == $repData[$c][$role]) { // see if there's a match
        $repGroup = $groups;                  // if so, assign the group
    } 
 }  

它正确设置了team_leader和region,但其他任何东西只是将其设置为区域组。

刚才意识到它实际上重写了这个价值。

1 个答案:

答案 0 :(得分:2)

您的代码会在每个if语句中覆盖$groups。您可能希望在switch / case语句中重写它,默认值为[5]

假设第一个if为true,因此$FullName == $repData[$c]['ceo']为真,$groups变为[13]。在下一行中,有两种选择:

  • 一个人是一个董事(和一个CEO,但没关系,看下面为什么)
  • 或某人不是董事(可能是CEO)

两个情况下,$groups将获得[10][5]的值,这意味着无论上述声明中发生了什么,此声明会覆盖它。因此,只有你的最后一个if语句能够产生你可能期望的结果。

  

“每个角色只有一个小组”

在这种情况下,一个简单的switch / case语句将起作用:

switch($FullName){

  case ($repData[$c]['ceo']):
    $groups = '[13]';
    break;                                          

  case ($repData[$c]['director']):
    $groups = '[10]';
    break;

  // etc... for other roles

  default: 
    $groups = '[5]';
    break;
}   

或者你可以更简单,并使用关联数组将角色与组号结合起来。例如:

$roleGroups = array('ceo' => '[13]', 'director' => '[15]', etc);

然后看看是否匹配:

$groups = '[5]'; // default, to be overwritten if a role is found below
foreach ($roleGroups as $role => $group) {  // go through all the groups
    if ($FullName == $repData[$c][$role]) { // see if there's a match
        $groups = $group;                   // if so, assign the group
    }
 }

希望这是有道理的。无论哪种方式,如果找到角色,$groups将具有角色的编号,否则为5。