简体   繁体   中英

How do I eliminate 3 lines of repetitive code?

The three lines repeat themselves twice. How could this be done better?

 $selectedComponentsNewTmp = $this->getNewSelectedComponents(); $selectedComponentsNew = []; foreach ($selectedComponentsNewTmp as $component) { $selectedComponentsNew[$component['componentGroup']['Count_0']]['name'] = $component['componentGroup']['name']; $selectedComponentsNew[$component['componentGroup']['Count_0']]['value'] = $component['coverage']['value']?? ''; $selectedComponentsNew[$component['componentGroup']['Count_0']]['txt'] = $component['coverage']['txt']?? ''; } $selectedComponentsOldTmp = $this->getOldSelectedComponents(); $selectedComponentsOld = []; foreach ($selectedComponentsOldTmp as $component) { $selectedComponentsOld[$component['componentGroup']['Count_0']]['name'] = $component['componentGroup']['name']; $selectedComponentsOld[$component['componentGroup']['Count_0']]['value'] = $component['coverage']['value']?? ''; $selectedComponentsOld[$component['componentGroup']['Count_0']]['txt'] = $component['coverage']['txt']?? ''; }

You could perhaps use an array to specify the final value used in each line and iterate that array within the outer loop.

$args=['name','value','txt'];
$new=$old=[];


foreach( $this->getNewSelectedComponents() as $component) {
    foreach( $args as $arg ) $new[$component['componentGroup']['Count_0']][$arg] = $component['componentGroup'][$arg] ?? '';
}
foreach( $this->getOldSelectedComponents() as $component ) {
    foreach( $args as $arg ) $old[$component['componentGroup']['Count_0']][$arg] = $component['componentGroup'][$arg] ?? '';
}

You could create and use a function :

function

function myFunction($selectedComponentsNew, $component) {
    $selectedComponentsNew[$component['componentGroup']['Count_0']]['name'] = $component['componentGroup']['name'];
    $selectedComponentsNew[$component['componentGroup']['Count_0']]['value'] = $component['coverage']['value'] ?? '';
    $selectedComponentsNew[$component['componentGroup']['Count_0']]['txt'] = $component['coverage']['txt'] ?? '';
}

usage

$selectedComponentsNewTmp = $this->getNewSelectedComponents();
$selectedComponentsNew = [];
foreach ($selectedComponentsNewTmp as $component) {
    myFunction($selectedComponentsNew, $component);
}

$selectedComponentsOldTmp = $this->getOldSelectedComponents();
$selectedComponentsOld = [];
foreach ($selectedComponentsOldTmp as $component) {
    myFunction($selectedComponentsOld, $component);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM