为了账号安全,请及时绑定邮箱和手机立即绑定

如何使代码干燥而不重复,PHP

如何使代码干燥而不重复,PHP

PHP
慕仙森 2022-07-29 16:15:46
我想知道我怎样才能让它更简单......事情是if($results['experience'] == 0) { loadViev('experience',$experience, $careerGoals,$mainSectionLines); }if($results['Education'] ==  0) { loadViev('Education',$graduate,$careerGoals,$mainSectionLines); }if($results['Extra'] == 0)      { loadViev('Extra',$extra,$careerGoals,$mainSectionLines); }if($results['Licence'] == 0)     { loadViev('Licence',$licence,$careerGoals,$mainSectionLines); }if($results['Cert'] == 0)        { loadViev('Certyfikaty',$cert,$careerGoals,$mainSectionLines); }if($results['conferences'] == 0){ loadViev('Conferences',$conferences,$careerGoals,$mainSectionLines); }if($results['Courses'] == 0)    { loadViev('Courses',$Courses,$careerGoals,$mainSectionLines); }if($results['Hobbys'] == 0)  { loadViev('Hobby',$hobby,$careerGoals,$mainSectionLines); }如您所见,如果某些"name" == 0功能将运行,目前大约有 14 种组合,我知道有可能比复制和粘贴整个代码 14 次更快...结果代码:$results =[];foreach ($userChoice as $key => $value) {  $setVal = $value['key'];  $results[$setVal] = $value['order'];}结果只获取一个部分的名称和订单nr。' $userChoice' 只是一个包含数据的数组有人知道我该怎么做吗?此外,结果是收集所有部分数据(14 个部分),如您所见,我只需要选择 8 个。
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

唯一的区别是正在加载的单词和变量的名称。单词保持不变,但变量是小写的。


因此,您需要做的就是loadViev将$setVal名称(单词本身)作为第一个参数,并将$$setval其作为第二个参数。这使用变量 variables将单词作为变量执行。


不幸的是,您不能(轻松)strtolower()直接在变量变量上使用类似的东西,因此您必须首先将它们独立地转换为小写。


这可以在下面看到:


$results =[];

foreach ($userChoice as $key => $value) {

  $setVal = $value['key'];

  $results[$setVal] = $value['order'];

  if ($value['order'] == 0) {

    $lower = strtolower($setVal);

    loadViev($setVal, $$lower, $careerGoals, $mainSectionLines);

  }

}


查看完整回答
反对 回复 2022-07-29
?
Qyouu

TA贡献1786条经验 获得超11个赞

如何创建一个包含相关值的结构并对其进行迭代?


$mapping = [

    ['key' => 'experience', 'view' => 'experience','data' => $experience],

    ['key' => 'Education', 'view' => 'Education','data' => $graduate],

    ['key' => 'Extra', 'view' => 'Extra','data' => $extra],

    ...

    ...

];



foreach ($mapping as $m)

{

    if ($results[$m['key']]==0) 

    {

        loadViev($m['view'], $m['data'], $careerGoals,$mainSectionLines);

        break; 

    }

}

如果您可以使您的键/变量名称一致,则可以进一步简化代码。例如


$validKeys = ['experience', 'education', ... ];


foreach($validKeys as $k)

{

    if($results[$k] == 0) 

    {

        loadviev($k, $$k, $careerGoals,$mainSectionLines)

    }

}


查看完整回答
反对 回复 2022-07-29
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信