выполнение математических операций над значениями числового массива в PHP - PullRequest
0 голосов
/ 24 июня 2011

Ладно, не совсем то, что я ожидал ... Я не знал, что мой код был настолько нечитаемым ... извините! Что я могу сделать, чтобы это исправить? Я действительно хотел бы просто выполнить (что я думал, было) простую математику, чтобы получить итоги. Я искал повсюду и читал так много информации о массивах, и, очевидно, я просто не понимаю концепцию ... любая помощь приветствуется и будет С благодарностью оценена!


Я создаю фиктивную форму заказа, в которой есть переключатели, флажки и используются массивы для отображения общей суммы покупки. У меня есть форма, которая работает, за исключением того, что я не могу получить общую сумму из двух разных массивов, которые у меня есть. $ total = $ extras + $ extra не работает и, честно говоря, я должен был знать, что это не так просто! ... Любые предложения о том, какую формулу использовать, чтобы я мог получить общую сумму в долларах всех выбранных опций? Кроме того, кто-нибудь может мне помочь, чтобы элементы флажка были перечислены в новой строке, а не в новой таблице?

Заранее спасибо!

Еще пара вещей: я должен держать это в редуксе и хотел бы сохранить вывод в таблице таким, какой он есть ... кроме этого, не стесняйтесь менять то, что вы хотите / нуждаетесь.

Я новичок в массивах PHP и, похоже, испытываю трудности только в том, что касается их значений, но, поскольку я знаю, насколько важны массивы в PHP, я бы хотел посмотреть, как они работают!

    <?php

    /*This stuff is only here because I want to make sure
    there are 2 decimal places in the final numbers since
    I'm dealing in "money" values*/
    $total = number_format ($total,2);
    $value = number_format ($value,2);
    $additional = number_format ($additional,2);


    $value = array("Short Trip"=>15.99, "Long Trip"=>28.99, "Overnight"=>10.99 "Forever"=>99.99);

    if(isset($_POST['travel'])) {

    $extras = array("Hair Brush"=>1.50, "Shampoo"=>1.50, "Toothpaste"=>1.50, 
    "Cream Rinse"=>1.50, "Tooth Brush"=>1.50, 
    "Shower Cap"=>1.50, "Washcloth"=>1.50, "Mouthwash"=>1.50);

    if (isset($_POST['extras'])) {
    foreach ($_POST['extras'] as $additional) {
    echo "<table border =\"2\">
    <tr><td>Item</td><td>Charges</td></tr>
    <tr><td>".$_POST['travel']."</td>
    <td> $".$value[$_POST['travel']]."</td></tr>
    <tr>

    <td>".$additional."</td>
    <td> $".$extras[$additional]."</td>

    </tr>
    <tr><td>Your total</td> <td>".$total."</td></tr>
    </table>";

    }
    }
    }

    ?>


    <html>
    <body>
    <form action="" method="post">

    <table border="2">
    <tr>
    <td colspan="2" align="center" scope="col">Stay Information</td>
    </tr>
    <tr>
    <td><input type="radio" name="travel" value="Short Trip" />Short trip $15.99</td>
    <td><input type="radio" name="travel" value="Long Trip" />Long trip $28.99</td>
    </tr>
    <tr>
    <td><input type="radio" name="travel" value="Overnight" />Overnight $10.99</td>
    <td><input type="radio" name="travel" value="Forever" />Forever $99.99</td>
    </tr>
    </table>
    <table border="2">
    <tr>
    <td colspan="2" scope="col">What will you need?($1.50 each)</td>
    </tr>
    <tr>
    <td><input type="checkbox" name="extras[]" value="Hair Brush" />Hair Brush</td>
    <td><input type="checkbox" name="extras[]" value="Shampoo" />Shampoo</td></tr>
    <tr>
    <tr><td><input type="checkbox" name="extras[]" value="Toothpaste" />Toothpaste</td>
    <td><input type="checkbox" name="extras[]" value="Cream Rinse" />Cream Rinse</td></tr>
    </tr>
    <tr>
    <td><input type="checkbox" name="extras[]" value="Tooth Brush" />Tooth Brush</td>
    <td><input type="checkbox" name="extras[]" value="Shower Cap" />Shower Cap</td></tr>
    <tr>
    <tr><td><input type="checkbox" name="extras[]" value="Washcloth" />Washcloth</td>
    <td><input type="checkbox" name="extras[]" value="Mouthwash" />Mouthwash</td></tr>
    </tr>

    <tr><td colspan="2">
    <input type="submit" value="Submit"></td></tr>
    </table>
    </form>
    </body>
    </html>

Ответы [ 2 ]

2 голосов
/ 24 июня 2011

В комментариях отмечены некоторые проблемы, основной из которых является форматирование вашего кода. Действительно, при попытке выяснить, что было неправильно в скрипте, запутанное форматирование может добавить часы потерянного времени.

Первое, что вы можете заметить, это то, что в вашем массиве $value отсутствует запятая.

$value = array("Short Trip"=>15.99, "Long Trip"=>28.99, "Overnight"=>10.99 "Forever"=>99.99)
//  comma here -----------------------------------------------------------^

Форматирование - это в некоторой степени вопрос стиля, но главное - это удобочитаемость, так что вам будет легче ловить подобные ошибки.

Вот сокращенная версия того, как может выглядеть ваш скрипт:

<?php

$value = array(
    "Short Trip" => 15.99, 
    "Long Trip" => 28.99, 
    "Overnight" => 10.99,
    "Forever" => 99.99
);

$extras = array(
    "Hair Brush" => 1.50, 
    "Shampoo" => 1.50, 
    "Toothpaste" => 1.50, 
    "Cream Rinse" => 1.50, 
    "Tooth Brush" => 1.50, 
    "Shower Cap" => 1.50, 
    "Washcloth" => 1.50, 
    "Mouthwash" => 1.50
);

// combine condititions
if (isset($_POST['travel']) && isset($_POST['extras'])) {

    $total = $value[$_POST['travel']];
    // start table html (before foreach loop)

    // store html in a variable to print later
    $html = "<table border =\"2\">
              <tr>
               <td>Item</td>
               <td>Charges</td>
              </tr>
              <tr>
                <td>" . $_POST['travel'] . "</td>
                <td> $" . $total . "</td>
              </tr>";

    foreach ($_POST['extras'] as $additional) {
        // add a row per extra
        $html .= "<tr>
                    <td>" . $additional . "</td>
                    <td> $" . $extras[$additional] . "</td>
                  </tr>";

        // increment total
        $total += $extras[$additional];
    }
    $html .= "<tr>
               <td>Your total</td> 
               <td>" . $total . "</td>
              </tr>
            </table>";

}
?>
<html>
<body>
<form action="" method="post">

<?php 
if (isset($html)) {
    echo $html;
}
?>

<table border="2">
.....

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

0 голосов
/ 24 июня 2011

Впечатляющий код Дага. Ненавижу вам говорить, но я думаю, что может быть еще одна ошибка. Я не могу понять, почему, но если кто-нибудь еще запустит этот код, он увидит, что математика выполняется только на его «дополнительных» элементах за $ 1,50 - нет общего коллективного труда.

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