2015-11-06 11 views
5

Z powodu dość starej biblioteki, z którą pracuję, muszę porąbać tablice nawet na pięć kawałków. Tak więc, jeśli moja tablica ma 9 elementów, muszę ją porąbać (5 i 4), a następnie muszę dodać pusty element do ostatniej tablicy, aby uzyskać go do 5.DRY - dodaj pewną liczbę elementów do końca tablicy, aż jej liczba osiągnie określoną wartość.

Napisałem bardzo zły kod to działa, ale zdaję sobie sprawę, że jest to niezgodne z zasadami DRY, ponieważ zlicza liczbę i używa wielu instrukcji if, aby wypchnąć poprawną liczbę pustych elementów, aby uzyskać kopię zapasową do 5.

Czy ktoś może mi doradzić, w jaki sposób powinienem złamać ten kod, aby $chunkFive był array_push ed, dopóki nie ma 5 elementów?

$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); ' –

Odpowiedz

5

Zastosowanie array_pad:

array_pad($chunkFive, 5, $blank); 

np

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

Funkcja W PHP 4 - zwykle opłaca się używać w dodatkowe funkcje, jak są one zoptymalizowane implementacje C w większości przypadków .

+0

Nigdy bym nie pomyślał, aby wyszukać natywną funkcję, dzięki! – user1486133

0

Można spróbować czegoś takiego:

$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

Jak o czymś takim

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

Z tym nie będzie nawet potrzebne do if() {} else {} część. Jeśli twoja macierz ma długość 5, pętla nie zostanie uruchomiona, ponieważ $delta będzie 0.

0

usuwając wszystkie warunki:

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

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

nie używałem array_push ponieważ robi to samo jako nowej pozycji tablicy i używa się jeszcze kilka wskazówek php (dla wywołania func)

+0

Tak, ale OP używa '$ blank', aby podeprzeć ich tablicę, dopóki nie będzie zawierała pięciu elementów (wszystkie z tablicy typów). – Havelock

+0

Prawda, naprawiono. Dzięki – Bolovsky

Powiązane problemy