DRY-将一定数量的元素添加到数组的末尾,直到它';s计数达到特定的整数


DRY - add certain number of elements to end of array until it's count reaches a specific int

由于我使用的是一个相当旧的库,我需要将数组分块为五个数组。因此,如果我的数组有9个元素,我需要将其分组(5和4),然后我需要在最后一个数组中添加一个空白元素,使其达到5。

我写了一些非常糟糕的代码,但我知道这违反了DRY原则,因为它计算数字,并使用多个if语句来推送正确数量的空白元素,以返回到5

有人能告诉我应该如何分解这个代码,使$chunkFive变成array_push,直到它有5个元素吗?

$blank = array("","","blank-image.png","",""); // create the blank image array
if(count($chunkFive) < 5){
    echo 'it contains less than five elements';
    if(count($chunkFive) == 4){
        echo 'insert one element'; // 4 present + array_push 1 = 5
        array_push($chunkFive,$blank);
    }else if(count($chunkFive) == 3){
        echo 'insert two elements'; // 3 present + array_push 2 = 5
        array_push($chunkFive,$blank);
        array_push($chunkFive,$blank);
    }else if(count($chunkFive) == 2){
        echo 'insert three elements'; // 2 present + array_push 3 = 5
        array_push($chunkFive,$blank);
        array_push($chunkFive,$blank);
        array_push($chunkFive,$blank);
    }else if(count($chunkFive) == 1){
        echo 'insert four elements';  // 1 present + array_push 4 = 5
        array_push($chunkFive,$blank);
        array_push($chunkFive,$blank);
        array_push($chunkFive,$blank);
        array_push($chunkFive,$blank);
    }
}else{
    echo 'it contains five elements'; // no need to adjust
    // do nothing
}

使用array_pad:

array_pad($chunkFive, 5, $blank);

例如:

[20] boris> $blank = ''; // easier to read ;-)
// ''
[21] boris> array_pad(array("one"), 5, $blank);
// array(
//   0 => 'one',
//   1 => '',
//   2 => '',
//   3 => '',
//   4 => ''
// )
[22] boris> 

该函数从php4开始就存在了——使用内置函数通常是有回报的,因为它们在大多数情况下都是优化的c实现。

您可以尝试以下操作:

$blank = array("","","blank-image.png","",""); 
if(count($chunkFive) < 5){
    echo 'insert '.(5-count($chunkFive)).' element';
    while(count($chunkFive) < 5){
        array_push($chunkFive,$blank);
    }
} else{
    echo 'it contains five elements'; // no need to adjust
    // do nothing
}

像这样的东西怎么样

$fixedLength = 5;
$delta = $fixedLength - count($chunkFive);
for ($i = 0; $i < $delta; $i++) {
    array_push($chunkFive,$blank);
}

有了这个,您甚至不需要if () {} else {}部件。如果数组的长度为5,则循环将不会运行,因为$delta将是0

删除所有条件:

$blank = array("","","blank-image.png","","");
for ($i = count($chunk5); $i < 5 ; $i++) {
    $chunk5[] = $blank;
}

我没有使用array_push,因为它的作用与新的数组位置相同,并且使用了更多的php指令(用于func调用)