2017-01-13 3 views
0

Я бы хотел динамически изменить условие, в зависимости от того, пуста ли таблица.Изменение, если условие динамически

Если таблица пуста, она должна записывать все данные до вчерашнего дня, если не пуста, она должна записывать сегодняшние данные.

Мой текущий код не работает:

$db->get('history'); 
$emptyTable = $db->count; // This return 0 or 1 
$condition = setCondition($emptyTable); 

foreach($extract as $trade) { 
    $date = strtotime($trade['Date']); 
    $today = strtotime(date("d/m/Y")); 

    if($condition) { 
    // do something 
    } 
} 

function setCondition($bool) { 
    switch ($bool) { 
    case 1: 
     return $date == $today; 
     break; 
    case 0: 
     return $date < $today; 
     break; 
    } 
} 

ответ

0

Вы не проходя $date и $today в свою функцию и вызовите ее внутри foreach и приложите возвратную часть в setCondition, чтобы она вернула строку.

foreach($extract as $trade) { 
     $date = strtotime($trade['Date']); 
     $today = strtotime(date("d/m/Y")); 
     $condition = setCondition($emptyTable,$today,$date); 
    // echo $condition//condition string 
     if($condition) { 
     // do something 
     } 
    } 


function setCondition($bool,$today,$date) { 
    switch ($bool) { 
    case 1: 
     return "'$date' == '$today'"; 
     break; 
    case 0: 
     return "'$date' < '$today'"; 
     break; 
    } 
} 

DEMO

+0

ой! это было то !!! Я забыл это!! Спасибо друг!! –

0

Ваше само условие должно быть вызов функции, возвращающей логическое значение. Это то, что делает ваш setCondition функция:

function setCondition($bool) { 
    switch ($bool) { 
    case 1: 
     return $date == $today; 
     break; 
    case 0: 
     return $date < $today; 
     break; 
    } 
} 

Поскольку он ничего не установлен, я предлагаю переименовать его evaluateCondition.

В дальнейшем, вы можете непосредственно вызывать эту функцию в качестве условия:

if(evaluateCondition($booleanVariableToTest)) { 
    // do something 
} 

о том, почему ваш код не работает: вы в основном оценивать $condition один раз, в самом начале:

$condition = setCondition($emptyTable); 

После этого , $condition никогда не меняется. Поэтому он не динамически переоценивается.


Редактировать

От чтения комментария из вас, я понимаю, что вы на самом деле не пытается динамически оценивать состояние, но статически оценить его, в зависимости от других параметров (а именно, $date и $today).

Ваша функция должна принимать эти переменные в качестве аргументов, поэтому их имена фактически означают что-то в рамках этой функции. Правильный код:

function setCondition($bool, $date, $today) { 
    switch ($bool) { 
    case 1: 
     return $date == $today; 
     break; 
    case 0: 
     return $date < $today; 
     break; 
    } 
} 

В этом случае вам не нужно вызывать функцию setCondition на каждой итерации, так что ваш if тест остается:

if($condition) { 
    // do something 
} 
+0

Это то, что я не оцениваю условие, просто пытаюсь передать «$ date == $ today» или «$ date <$ today» значение $ condition и пытаюсь построить динамически, если ($ date == $ today) или if ($ date <$ today) –

+0

@CarlosDiaz Я действительно понял, что вы готовы сделать, и обновил мой ответ. –

Смежные вопросы