猿问

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

我想知道我怎样才能让它更简单......事情是


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 个。


慕仙森
浏览 103回答 2
2回答

扬帆大鱼

唯一的区别是正在加载的单词和变量的名称。单词保持不变,但变量是小写的。因此,您需要做的就是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);  }}

Qyouu

如何创建一个包含相关值的结构并对其进行迭代?$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)    }}
随时随地看视频慕课网APP
我要回答