Создать / добавить массив с инструкциями переключения - PullRequest
1 голос
/ 19 декабря 2011

Для удобства чтения и производительности я бы хотел создать массив с оператором switch вместо if-statements.

Рассмотрим следующий оператор if:

$size = 2;
$array = array();
if($size >= 1) { array_push($array,'one','foo'); }
if($size >= 2) { array_push($array,'two','bar','barista'); }
if($size >= 3) { array_push($array,'three','zoo','fool','cool','moo'); }

Он в основном отсчитывается от 1 до $size, он может быть более читабельным и, скорее всего, намного быстрее с параметром switch-statment ... но как вы это построите ??

$step = 2;
$array = array();
switch($step)
{
    case ($step>1): array_push($array,'one','foo');
    case ($step>2): array_push($array,'two','bar','barista');
    case ($step>3): array_push($array,'three','zoo','fool','cool','moo');
}

Я попытался опустить break, который не работал - как говорится в руководстве:

В операторе switch условие оценивается только один раз [...]. PHP продолжает выполнять операторы до конца переключения блок или первый раз, когда он видит оператор break.

В любом случае, у кого-нибудь есть идея, как создать такой массив с switch -статементом ??

Ответы [ 3 ]

4 голосов
/ 19 декабря 2011

Конечно, то, что вы хотите, может быть достигнуто гораздо проще, используя

$array=range(1,$size);

На основании дальнейших комментариев и последующих правок, что-то вроде:

$baseArray = $array(array('one'),
                    array('two','twoA'),
                    array('three','threeA','threeB'),
                    array(),
                    array('five'),
                   );
$step=2;
$array = array_slice($baseArray,0,$step);

, а затем сгладить массив $ 1007 *

1 голос
/ 19 декабря 2011
$valuesIWant = array(1=>'one','two','three','four');
$array = array();
for ($i = $step - 1; $i > 0; $i--) $array[] = $valuesIWant[$i];
$array = array_reverse($array);

Итак, если $step равно 2, вы получите:

Array
(
    [0] => one
)

... и если это 4, вы получите:

Array
(
    [0] => one
    [1] => two
    [2] => three
)
1 голос
/ 19 декабря 2011

Хорошо, оператор switch будет выглядеть так:

edit: вышеупомянутое не работает - позвольте мне взглянуть.

но в этом примере вы могли бы просто сделать:

$size = 2;
$array = range(1, $size); // Array ( [0] => 1 [1] => 2 )
...