A switch-case szerkezet első értelmes használata

Antal Áron • 2015. október 28.

Ahogy egyre többet kezdtem programozni, egyre kevésbé láttam értelmét a switch-case szerkezetnek. Hisz milyen olyan szituáció lehet, amit nem lehet megoldani a jó öreg if-then-elseif-else vagy a ternary operátorral? Mindig kerestem az olyan alkalmat, amikor tényleg ez jelenti a legjobb megoldást.

Hát eljött ez a nap is!

Az alapszituáció, hogy van egy tömbünk, a tömb elemei pedig tulajdonságokkal rendelkeznek. Közte van egy sorrendiséget megtestesítő is. A feladatunk, hogy egy másik tömbbe gyűjtsük be az előző tömb elemeit, egy bizonyos sorrendűt kivéve, és az annál nagyobb sorrendűeknek pedig csökkentsük vissza a sorrendjét, de úgy, hogy a tömb eredeti sorrendjét (a kiveendő elem kivételével) és az eredeti tömböt is megtartsuk.

Hát lássuk:

<?php

$comparedValue = ...;
$newArray = [];
foreach ($oldArray as $value) {
    $value = clone $value;
    switch (true) {
        case $value->getSort() > $comparedValue:
            $value->setSort($value->getSort() - 1);
            // no break
        case $value->getSort() !== $comparedValue:
            $newArray[] = $value;
            break;
    }
}

És a kód működik.