2015-11-06 4 views
5

Из-за довольно старой библиотеки, с которой я работаю, мне нужно собрать массивы в четные куски из пяти. Итак, если у моего массива 9 элементов, мне нужно его разбить (5 и 4), а затем мне нужно добавить пустой элемент в последний массив, чтобы получить его до 5.DRY - добавить определенное количество элементов в конец массива до тех пор, пока счетчик не достигнет определенного значения int

Я написал очень плохой код это работает, но я знаю, что это противоречит принципам DRY, потому что он подсчитывает число и использует несколько операторов if для ввода правильного количества пустых элементов, чтобы вернуться к 5.

Может кто-нибудь посоветует мне, как я должен нарушать этот код так, чтобы $chunkFive был array_push ed до тех пор, пока он не имеет 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

Trivial: ' 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 - это обычно окупятся использовать встроенные функции, так как они оптимизированы реализации с в большинстве случаев ,

+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

Смежные вопросы

 Смежные вопросы