2015-11-06 22 views
5

由於我正在使用一個相當古老的庫,因此我需要將數組分成幾塊甚至五塊。所以,如果我的數組有9個元素,我需要將它組合起來(5和4),然後我需要在最後一個數組中添加一個空元素使其達到5.DRY - 將一定數量的元素添加到數組尾部直到數到達特定的int

我寫了一些非常糟糕的代碼這是有效的,但我知道這是違反DRY原則,因爲它計數的數量,並使用多個if語句來推動正確數量的空白元素,以取回到5

任何人都可以告訴我,我應該如何破壞這個代碼,以便$chunkFivearray_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 
} 
+1

簡單:' while(count($ chunkFive)<5)array_push($ chunkFive,$ blank);' –

回答

5

使用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> 

的功能存在,因爲PHP 4 - 它通常不負有​​心人,以使用內置的功能,因爲它們在大多數情況下,優化的C實現。

+0

我永遠不會想到搜索本機函數,謝謝! – user1486133

0

你可以嘗試這樣的:

$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 
} 
0

如何像

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

有了這個,你甚至不會需要if() {} else {}部分。如果您的數組長度爲5,則循環將不會運行,因爲$delta將爲0

0

刪除所有條件:

$blank = array("","","blank-image.png","",""); 

for ($i = count($chunk5); $i < 5 ; $i++) { 
    $chunk5[] = $blank; 
} 

我沒有使用array_push,因爲它同樣作爲一個新的陣列位置,並使用了一對夫婦更PHP指令(FUNC調用)

+0

是的,但是OP使用'$ blank'來填充他們的數組,直到它有五個元素(所有的數組類型) – Havelock

+0

真,固定的。謝謝 – Bolovsky