2013-08-31 2 views
0

У меня возникли трудности с делением общей суммы корзины на сайте электронной торговли, чтобы создать сумму вклада для оплаты клиентом.Отдел PHP с переменными, не работает

Как вы увидите ниже, я пытаюсь отобразить 25% от суммы заказа в виде суммы вклада. однако я пробовал много вариантов этого, и все возвращают «0».

Если я повторяю какую-либо переменную независимо, они повторяют правильное значение, но при делении друг на друга результат равен «0» каждый раз.

любая помощь, я чувствую, что я что-то очень просто отсутствует ..

Благодаря

<?php $amount = $woocommerce->cart->get_total(); ?> 
          <?php $percent = 4; ?> 
          <?php $deposit = $amount/$percent; ?> 


          <strong><?php echo $deposit; ?></strong> 
+1

Что означает 'echo $ amount;' output? –

+0

общая сумма тележки .. в этом конкретном случае, 1200 долларов или около того. –

+0

Вы имеете в виду 'var_dump ($ amount);'? Это: 'строка (41)" $ 1,022.29 "' –

ответ

0

Попробуйте использовать слепки ->(field_type):

<?php $amount = $woocommerce->cart->get_total(); ?> 
          <?php $percent = 4; ?> 
          <?php $deposit = (float)$amount/(int)$percent; ?> 


          <strong><?php echo $deposit; ?></strong> 

С помощью вы можете конвертировать из одного типа в другой.

Например, если с $ woocommerce-> cart-> get_total(); вы получаете строку с (флоат) конвертировании в поплавка

PHP.NET about casting

0

$commerce->cart->get_total(); функция отвечает выход, такие как <span class="amount">560&nbsp;&euro;</span> ($ 1,022.29) и вам нужно преобразовать этот на номер, чтобы вы могли получить плату (25%) от суммы.

Прежде всего, проблема в том, что функция get_total() отвечает строкой.

правильный способ исправить эту строку будет простой пример, такой как

<?php 
    $totalAmountString = $commerce->cart->get_total(); //<span class="amount">560&nbsp;&euro;</span> 
    $totalAmountString = strip_tags($totalAmountString); //get rid of the span - we're left with "560&nbsp;&euro;" 
    $totalAmountString = str_replace(array("&nbsp;&#38;", ","), "", $totalAmountString); 
    $totalAmountFloat = (float)$totalAmountString; 
    $percentage = 0.25; 
    $deposit = $totalAmountFloat * $percentage; 

    var_dump($deposit); 
?> 

Мы снимаем все HTML. Когда вы var_dump имели длину строки 41, я знал, что проблема в этом. Он возвращает теги span и html внутри строки. Вы видите только номер, потому что html скрыт. Эта строка $totalAmountString = str_replace(array("&nbsp;&#38;", ","), "", $totalAmountString); может нуждаться в редактировании в зависимости от используемого символа валюты, &#38 - доллар, но это может быть сделано двумя или тремя разными способами. Надеюсь это поможет.

+0

' cart-> get_total(); ?> ' \ Это также возвращает 0. Он должен возвращать 25% значения get_total. Я не могу понять это. –

+0

Если это возвращает 0, ваша '$ amount' не является' int' или '' float'. Для целей тестирования, пожалуйста, 'var_dump ($ amount);' и дайте мне знать, что он говорит. Затем я смогу кодировать/консультировать по пути вперед. – Vector

+0

именно это: 'строка (41)« $ 1,022.29 »' Спасибо за Шарлем помощь, я ценю это –

0

если выход суммы имеет знак валюты, вы можете лишить валюту выписаться, получив значение с плавающей точкой, используя floatval

<?php $amount = $woocommerce->cart->get_total(); ?> 
          <?php $percent = 4; ?> 
          <?php $deposit = floatval($amount)/$percent; ?> 


          <strong><?php echo $deposit; ?></strong> 
+0

Спасибо за совет, но я все равно получаю «0». Значение содержит $ перед номером, но когда i 'echo (float) $ amount;' Я получаю «0». когда я 'echo $ amount', я получаю значение. –

0

Если значение $amount в виде «$ 1,022.29» попробовать это:

<?php $amount = $woocommerce->cart->get_total(); ?> 
          <?php $percent = 4; ?> 
          <?php $deposit = preg_replace('/^(\$)?([0-9.]+) ?$/', '$2', str_replace(',', '', $amount))/$percent; ?> 


          <strong><?php echo $deposit; ?></strong> 
+0

спасибо. Это возвращает «0». Однако это «int», поэтому это хороший знак. –

+0

Что произойдет, если вы запустите это? 'var_dump (preg_replace ('/^(\ $)? ([0-9.] +)? $ /', '$ 2', str_replace (',', '', $ amount)));' –