1

Тема: Упростите выражение.

Задание:
Упростить выражение, до одной строки!

switch ($transfer)
{
        case 'OUT':
                $money_out = ($bls_price > 0) ? $bls_price + $money_out : $money_out - $bls_price;
                break;
        case 'IN':
                $money_in = ($bls_price > 0) ? $bls_price + $money_in : $money_in - $bls_price;
                break;
        case 'REFUND':
                $money_refund = ($bls_price > 0) ? $bls_price + $money_refund : $money_refund - $bls_price;
                break;
}

Немного расскажу что это, чтобы было проще упрощать smile
Это все находится в while($row = $db->fetchrow($query))
{
....... здесь ......
}
идет подсчет денег входящих, исходящих, и возвратов.
Нужно вывести в конечном итого три переменных $money_out $money_in $money_refund
исходя из значения в паременной $bls_price которая равна $bls_price = $row['price'];
надеюсь теперь понятно smile
НО внимание! Значение переменной $bls_price может принимать как отрицательное так и положительное значение, исходя из того минус перед значением или плюс.

Задание на выдумку! Может кто сделает это еще лучше чем у меня уже сделано smile

Thumbs up Thumbs down

2

Re: Упростите выражение.

А зачам до одной строки?

P.S.
это не выражениe, это код, выражения - это a+b=c

3

Re: Упростите выражение.

Если честно, то тут нечего упрощать... тоесть можно переписать все с помощью if else но это не будет быстрее/удобнее

if ( $transfer == "OUT" and $bls_price > 0 ) $bls_price + $money_out;
else if ( $transfer == "OUT" ) $money_out - $bls_price;

if ( $transfer == "IN" and $bls_price > 0 ) $bls_price + $money_in;
else if ( $transfer == "IN" ) $money_in - $bls_price;

if ( $transfer == "REFUND" and $bls_price > 0 ) $bls_price + $money_refund;
else if ( $transfer == "REFUND" ) $money_refund - $bls_price;

Можно еще посмотреть в сторону оптимизации - как в сторону упрощения кода, это не значит уменьшения количества строк, а именно заменой более простыми операторами, в данном случае разницы между if и switch невижу... Можно поспорить насчет while и for, но тут впринципи и непоспоришь, while быстрее чем for.

Вот от нефиг делать тест сделал.

$r = 10000;

for ($i=0;$i<$r;$i++) {
    $a[$i] = rand (1, 910000);
}

$i=0;
while ($i<$r) {
    $a[$i] = rand (1, 910000);
$i++;
}

Выполнял каждый кусок по 10 раз и взял среднее значение, время в микросекундах

[mono]for    0.0263164043427
while    0.0242777824402

Array for
(
    [0] => 0.0543751716614
    [1] => 0.0434758663177
    [2] => 0.0425050258636
    [3] => 0.0319888591766
    [4] => 0.0149400234222
    [5] => 0.0149929523468
    [6] => 0.0150020122528
    [7] => 0.0159339904785
    [8] => 0.0149881839752
    [9] => 0.0149619579315
)
Array while
(
    [0] => 0.049250125885
    [1] => 0.044205904007
    [2] => 0.0427620410919
    [3] => 0.0149688720703
    [4] => 0.0149068832397
    [5] => 0.0148711204529
    [6] => 0.0148348808289
    [7] => 0.0148739814758
    [8] => 0.0148918628693
    [9] => 0.0172121524811
)[/mono]

4

Re: Упростите выражение.

${'money_'.strtolower($transfer)} += $price;

Вот такая строчка smile

Thumbs up Thumbs down

5

Re: Упростите выражение.

Я диградирую sad

Добавлено спустя   16 часов   2 минуты   10 секунд:
Мдя, чтобы основательно не забыть програмирование начал писать скрипты для работы...  Забыл про динамические переменные... стыдно, ой как стыдно...