【问题标题】:Condition goes directly in else even if there is condition which is met in if/esleif block即使在 if/esleif 块中满足条件,条件也直接进入 else
【发布时间】:2017-02-07 16:13:48
【问题描述】:

我的刀片模板中有条件检查客户是否从 api 调用中获得付款。问题是,如果满足某些if/elseif 条件并不重要,它总是会转到else 并显示其中的内容。

@if (is_array($totala['data']['incoming']) || is_object($totala['data']['incoming']))

    @foreach($totala['data']['incoming'] as $key => $date)
    @endforeach
           @if(strpos($date['address'], $address['address']) !== false )

                @if($order['price'] == $date['amount'] )
                    <span>Paid</span>

                @elseif($order['price'] < $date['amount'] )
                    <span>Over Paid</span>


                @elseif($order['price'] > $date['amount'] )
                    <span>Under Paid</span>
                @else                       
                @endif
           @else
                <span>Else block</span>                                
           @endif       
@else
    <span>Unpaid</span>
@endif

我之所以这样做是因为如果我将内部 if/else 块放在 foreach 中,我什至会在页面上得到不需要的结果,因为它们是 $totala['data']['vouts'] 中的多个元素,并且 foreach 循环迭代直到没有更多元素..

那么为什么结果总是在 else 块中呢?

注意:所有数据都在那里并且是正确的。我已经三次检查了 json 数组中的数据。

更新:这是数组的示例

Array
(
  [status] => success
  [data] => Array
    (
        [id] => id
        [incoming] => Array
            (
                [0] => Array
                    (
                        [address] => address1
                        [amount] => sum1

                    )

                [1] => Array
                    (
                        [address] => address2
                        [amount] => sum2

                    )

                [2] => Array
                    (
                        [address] => address3
                        [amount] => sum3

                    )

                [3] => Array
                    (
                        [address] => address4
                        [amount] => sum4

                    )

                [4] => Array
                    (
                        [address] => address5
                        [amount] => sum5

                    )
            )
    )
 )

使用foreach,我在数组[data][incoming] 中循环以搜索地址strpos($date['address'], $address['address']) !== false,然后当找到地址时,我想进入低谷条件。

我刚刚意识到我总是进入 else 块,因为它们是 [incoming] 中的多个数组并且总是不满足条件。那是对的吗?如果是这样,我该如何解决?

【问题讨论】:

  • $totala['data']['incoming'] 中有哪些数据?您的代码正在根据此数组中的最终元素进行评估,这可能是您想要的,但使用 foreach 循环并不是获得它的最佳方法。另外 - 哪个 else 块总是被触发?您的示例中有 3 个。
  • &lt;span&gt;Else block&lt;/span&gt; 这个块总是被触发。我已经用数组的外观示例更新了我的问题。
  • 好的,strpos($date['address'], $address['address']) 的评估结果为 false - 您的脚本中 $address['address'] 的值是多少?
  • 它的值来自数据库。它的地址保存在数据库中。此地址与[incoming] 内的数组之一匹配。将始终匹配 [incoming] 中的 1 个地址。我的意思是它应该匹配,如果不匹配应该进入 else 块。
  • 当我 var_dump $address['address']$date['address'] 我看到它们匹配,即等于。

标签: php arrays json laravel-blade laravel-4.2


【解决方案1】:

杂乱无章,但我认为这将满足您的需求。

@if (is_array($totala['data']['incoming']) || is_object($totala['data']['incoming']))

   <?php
      // find the first matching address in $totala['data']['incoming']
      $match = false;
      foreach ($totala['data']['incoming'] as $data) {
         if ($data['address'] == $address['address']) {
            $match = $data;
            break;
         }
      }
   ?>

   @if($match !== false )

      @if($order['price'] == $match['amount'] )
         <span>Paid</span>
      @elseif($order['price'] < $match['amount'] )
         <span>Over Paid</span>
      @else
         <span>Under Paid</span>                      
      @endif
   @else
      <span>No match found</span>                                
   @endif
@else
   <span>Unpaid</span>
@endif

如果您只对匹配数据感兴趣,您应该在控制器中提取此信息 - 而不是在视图中。

更新:
如果使用 PHP >= 5.5.0,您可以访问数组列函数,请查看 https://stackoverflow.com/a/34785508/2180572 以获得解释和示例。在您的代码中,将 php 块替换为...

<?php
   $match = array_search($address['address'], array_column($totala['data']['incoming'], 'address'));
   if($match) {
      $match = $totala['data']['incoming'][$match];
   }
?>

【讨论】:

  • 感谢您的回答。我试图在我的控制器中提取它但没有成功..这就是我进入视图的原因。你能举例说明如何在控制器中提取它并分享结果吗?将在几秒钟内测试此答案。
  • 酷,很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2021-06-19
相关资源
最近更新 更多