由于我使用的是一个相当旧的库,我需要将数组分块为五个数组。因此,如果我的数组有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调用)