Почему php не ведет себя так же, как когда я явно устанавливаю значение? - PullRequest
1 голос
/ 05 апреля 2011

Я пробовал один и тот же код в обоих направлениях, он работает первым способом, когда я делаю это вторым способом, он не ошибается, а просто ничего не делает.

Я получаю некоторые значения (две даты) в View в Drupal. Я могу напечатать значения и получить ТОЧНО те же значения, которые я установил явно. Я проверил это с помощью печати. ​​

Хотя значения с использованием print идентичны тем, которые я установил явно, он не работает с данными, полученными из Drupal.

Пример печати:

$fields['field_deal_from_value']->content;

//The result from this is that it prints the following:

2011-04-24

Версия 1 - Работа с явно установленным значением

<?php
$pastDateStr = "2011-04-24"; 
$pastDateTS = strtotime($pastDateStr); 

for ($currentDateTS = $pastDateTS; $currentDateTS <= strtotime("2011-05-28");$currentDateTS += (60 * 60 * 24)) { 
// use date() and $currentDateTS to format the dates in between 
$currentDateStr=date("d-m-Y",$currentDateTS); 
print $currentDateStr."<br/>"; 
}
?>

Версия 2 - Не работает - значения определенно установлены правильно

<?php
$pastDateStr = $fields['field_deal_from_value']->content; 
$pastDateTS = strtotime($pastDateStr); 

for ($currentDateTS = $pastDateTS; $currentDateTS <= strtotime($fields['field_deal_to_value']->content); $currentDateTS += (60 * 60 * 24)) { 
// use date() and $currentDateTS to format the dates in between 
$currentDateStr=date("d-m-Y",$currentDateTS); 
print $currentDateStr."<br/>"; 
}
?>

Ответы [ 4 ]

0 голосов
/ 05 апреля 2011

Я бы порекомендовал установить XDebug и пройтись по коду, чтобы вы могли точно видеть, что происходит.Он отлично работает со многими распространенными IDE (NetBeans, Eclipse и т. Д.)

0 голосов
/ 05 апреля 2011

Посмотрите на это:

<?php


$pastDateStr = "2011-04-24";
$pastDateTS = strtotime($pastDateStr);

for ($currentDateTS = $pastDateTS; $currentDateTS <= strtotime("2011-05-28");            $currentDateTS += (60 * 60 * 24)) {
// use date() and $currentDateTS to format the dates in between
    $currentDateStr=date("d-m-Y",$currentDateTS);
    print $currentDateStr."<br/>";
}


var_dump("break");

class X {
    var $content = "2011-04-24";
}
class Y {
    var $content = "2011-05-28";
}
$fields['field_deal_from_value'] = new X();
$fields['field_deal_to_value'] = new Y();



$pastDateStr = $fields['field_deal_from_value']->content;
$pastDateTS = strtotime($pastDateStr);

for ($currentDateTS = $pastDateTS; $currentDateTS <= strtotime($fields['field_deal_to_value']->content); $currentDateTS += (60 * 60 * 24)) {
// use date() and $currentDateTS to format the dates in between
    $currentDateStr=date("d-m-Y",$currentDateTS);
    print $currentDateStr."<br/>";
}


?>

работает нормально, потому что я установил $ fields ['field_deal_to_value']!

0 голосов
/ 05 апреля 2011

У вас есть опечатка или логическая ошибка. Если вы замените эту строку

for ($currentDateTS = $pastDateTS; $currentDateTS <= strtotime($fields['field_deal_to_value']->content); $currentDateTS += (60 * 60 * 24)) { 

с

for ($currentDateTS = $pastDateTS; $currentDateTS <= strtotime("2011-05-28"); $currentDateTS += (60 * 60 * 24)) { 

тогда вы получите тот же результат. Разница в том, что вы сравниваете в цикле for.

В вашем коде второй пример, по сути, запрашивает повторение только один раз, а первый - несколько раз.

0 голосов
/ 05 апреля 2011

Вы должны включить отчеты об ошибках полностью, чтобы вы могли видеть предупреждения.
Я подозреваю, что вы увидите ошибку, говорящую, что результат содержимого $ fields ['..'] -> не может использоваться при записиcontext (то есть как аргумент strtotime).
Я бы попытался сохранить значение содержимого $ fields ['..'] -> в переменной и использовать эту переменную в условии цикла.

...