2016-09-29 8 views
0

У меня есть условие в моем шаблоне клипа, который проверяет, оплачивается ли клиент из звонка api. Проблема в том, что не имеет значения, удовлетворены ли какие-либо из условий if/elseif, это всегда идет до else и показывает, что там находится.Условие идет прямо в другое, даже если есть условие, которое встречается в if/esleif block

@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 

Я сделал это так, потому что, если я ставлю внутренний, если/иначе блок внутри Еогеасп У меня даже нежелательные результаты на странице, потому что они являются несколько элементов внутри итерации петли $totala['data']['vouts'] и Еогеасп пока нет больше элементов.

Итак, почему результат всегда идет в другом блоке?

Примечание: все данные есть и указаны правильно. Я triple проверил данные в массиве json.

Update: Вот пример массива

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 Я обхвата в массиве [данные] [входящие] для поиска адреса strpos($date['address'], $address['address']) !== false тогда, когда адрес найден, я хочу пойти корыто условия.

Я только что понял, что я всегда вхожу в другой блок, потому что они являются множеством массивов в [входящем], и всегда условия не выполняются. Это верно? Если это так, как я могу это исправить?

+0

Какие данные находятся в '$ totala ['data'] ['incoming']'? Ваш код оценивается на основе конечного элемента в этом массиве, который может быть тем, что вы хотите, но использование цикла foreach не является лучшим способом его получения. Также - какой еще блок всегда запускается? В вашем примере 3. – Steve

+0

' Else block' этот блок всегда запускается. Я обновил свой вопрос на примере того, как выглядит массив. – Garg

+0

Итак, 'strpos ($ date ['address'], $ address ['address'])' оценивает значение false - каково значение '$ address ['address']' в вашем скрипте? – Steve

ответ

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 

Если вас интересуют только соответствующие данные, вы должны извлечь эту информацию в своем контроллере - не в представлении.

Update:
При использовании 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]; 
    } 
?> 
+0

Спасибо за ответ. Я попытался извлечь его в контроллер и не преуспел. Вот почему я понял это. Можете ли вы привести пример, как извлечь его в контроллер и поделиться результатами? Будет проверять этот ответ за секунду. – Garg

+0

Работало ли это в качестве примера выше? – Steve

+0

Да! Кажется, это работает. Благодаря! – Garg