PHP верно ложное утверждение с ожиданием - PullRequest
1 голос
/ 02 марта 2012

У меня есть какой-то код, который я редактирую для веб-сайта аукциона, дело в том, что мне нужно $ all_unpaid = false, если bid_amount равно нулю, я пробовал несколько настроек, но без результатов, возможно, у some1 могут быть какие-то предложения?

function direct_payment_multiple ($invoice_id, $items_array, $dp_array, $buyer_id)
{
    $output = false;

    $nb_sub_arrays = count($dp_array);
    if ($nb_sub_arrays)
    {
        $array_result = $dp_array[0];

        for ($i=1; $i<$nb_sub_arrays; $i++)
        {
            $array_result = @array_intersect($array_result, $dp_array[$i]);
        }

        $all_unpaid = true;
        for ($i=0; $i<$nb_sub_arrays; $i++)
        {
            $all_unpaid = (!$items_array[$i]['direct_payment_paid'] && !$items_array[$i]['flag_paid'] && $items_array[$i]['bid_amount'] > 0) ? $all_unpaid : false;
        }

        $same_currency = true;
        $currency = $items_array[0]['currency'];
        for ($i=0; $i<$nb_sub_arrays; $i++)
        {
            $same_currency = ($currency == $items_array[$i]['currency']) ? $same_currency : false;
        }
    }

    $output = (is_array($array_result) && $all_unpaid) ? true : false;

    return $output;
}

краткий обзор, этот аукционный сайт позволяет пользователям размещать ставку 0,00, если никто их не перебивает, то они получают предмет бесплатно, однако, если кто-то их перебивает, применяется обычный код

эй @TecBrat, я удалил эту строку

$all_unpaid = (!$items_array[$i]['direct_payment_paid'] && !$items_array[$i]['flag_paid'] && $items_array[$i]['bid_amount'] > 0) ? $all_unpaid : false; 

и заменил его на

$all_unpaid =true;
if ((!$items_array[$i]['direct_payment_paid'] && !$items_array[$i]['flag_paid'] )
    || !$items_array[$i]['bid_amount'] > 0)
  {
    $all_unpaid =false;
  }

однако, похоже, он делает то же самое, что и b4

Я изменил это на

                $all_unpaid =true;
if (($items_array[$i]['direct_payment_paid'] || $items_array[$i]['flag_paid'] )
    || $items_array[$i]['bid_amount'] > 0)
  {
    $all_unpaid =false;
  }

по-прежнему выглядит так же, как b4

В настоящее время это то, с чем я работаю

    function direct_payment_multiple ($invoice_id, $items_array, $dp_array, $buyer_id)
    {
        $output = false;

        $nb_sub_arrays = count($dp_array);
        if ($nb_sub_arrays)
        {
            $array_result = $dp_array[0];

            for ($i=1; $i<$nb_sub_arrays; $i++)
            {
                $array_result = @array_intersect($array_result, $dp_array[$i]);
            }

            $all_unpaid = true;
            for ($i=0; $i<$nb_sub_arrays; $i++)
            {
$all_unpaid =true; if (($items_array[$i]['direct_payment_paid'] || $items_array[$i]['flag_paid'] ) || $items_array[$i]['bid_amount'] > 0)

  {
    $all_unpaid =false;

  }
            }

            $same_currency = true;
            $currency = $items_array[0]['currency'];
            for ($i=0; $i<$nb_sub_arrays; $i++)
            {
                $same_currency = ($currency == $items_array[$i]['currency']) ? $same_currency : false;
            }
        }

        $output = (is_array($array_result) && $all_unpaid) ? true : false;

        return $output;
    }

1 Ответ

0 голосов
/ 02 марта 2012

эта строка:

$all_unpaid = (!$items_array[$i]['direct_payment_paid'] && !$items_array[$i]['flag_paid'] && $items_array[$i]['bid_amount'] > 0) ? $all_unpaid : false;

является хорошим примером того, почему я предпочитаю этот стиль:

if(condition){do stuff}

Мне кажется, я правильно перевел это как

if (!$items_array[$i]['direct_payment_paid'] 
    && !$items_array[$i]['flag_paid'] 
    && $items_array[$i]['bid_amount'] > 0)
  {
    $all_unpaid =$all_unpaid;
  }
else
  {
    $all_unpaid = false
  } 

...

Я тестировал этот скрипт на http://www.tecbrat.com/conditional_testing.php

<code><?php

$items_array['direct_payment_paid']=(int)$_GET['direct_payment_paid'];
$items_array['flag_paid']=(int)$_GET['flag_paid'];
$items_array['bid_amount']=$_GET['bid_amount'];

// simplified from //function direct_payment_multiple ($invoice_id, $items_array, $dp_array, $buyer_id)    
function direct_payment_multiple_tester ($items_array)
  {
    $all_unpaid =true;
    if ($items_array['direct_payment_paid'] || $items_array['flag_paid']
        || !$items_array['bid_amount'] > 0)
      {
        $all_unpaid =false;
      }
    return $all_unpaid;
  }

if (direct_payment_multiple_tester ($items_array))
  {
    echo "we still need payment";
  }
 else
  {
    echo "We received payment, or there is no charge.";
  }

echo '<pre>';
print_r($items_array);
echo '
';?>

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

http://www.tecbrat.com/conditional_testing.php?direct_payment_paid=1&flag_paid=0&bid_amount=50

http://www.tecbrat.com/conditional_testing.php?direct_payment_paid=0&flag_paid=1&bid_amount=50

http://www.tecbrat.com/conditional_testing.php?direct_payment_paid=1&flag_paid=1&bid_amount=50

http://www.tecbrat.com/conditional_testing.php?direct_payment_paid=0&flag_paid=0&bid_amount=0

http://www.tecbrat.com/conditional_testing.php?direct_payment_paid=0&flag_paid=0&bid_amount=50

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