Как сделать код DRY без повторов PHP - PullRequest
0 голосов
/ 23 января 2020

Мне интересно, как я могу сделать это проще ... Дело в том,

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'];
}

Результат только захватить имя раздела и номер заказа '$userChoice' - это просто массив с данными

У кого-нибудь есть идеи, как я могу это сделать? Кроме того, результат - собрать все данные о секциях (14 секций), где, как вы можете видеть, мне нужно только выбрать 8.

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Единственная разница - это загружаемое слово и имя переменной. Слово остается тем же, но переменная в нижнем регистре.

Таким образом, все, что вам нужно сделать, это loadViev имя $setVal (само слово) в качестве первого аргумента и $$setval как второй. Это выполняет слово как переменную, используя переменных переменных .

К сожалению, вы не можете (легко) использовать что-то вроде 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);
  }
}
1 голос
/ 23 января 2020

Как насчет создания структуры, содержащей соответствующие значения и повторяющейся по ней?

$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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...