【发布时间】: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 个。 -
<span>Else block</span>这个块总是被触发。我已经用数组的外观示例更新了我的问题。 -
好的,
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