虽然循环制作了太多的数组

时间:2010-12-31 06:29:04

标签: php arrays while-loop

我非常需要帮助。我现在正在制作的是日期选择器。相当多的更新它供我自己使用。

我需要阻止特定的日期范围。我找到了一个代码来执行此操作,它使用数组。我喜欢那样。

我需要的是一种使用范围内的每个日期创建数组的方法,因为我只输入了开始日期和结束日期。找到一个。像魅力一样。

但现在,我有一个问题。它使用相同的$创建一个新数组。所以压延机注册的唯一阵列是最新的阵列。基本上,我需要的只是一个数组。

我尝试了一些东西,但似乎没有任何效果。一段时间以来一直在考虑这个问题。有帮助吗?

function createDateRangeArray($strDateFrom,$strDateTo) //Changes a Range of Dates to Specific Dates
    {
    $aryRange = array(); //Creates an Array

    $iDateFrom = mktime(1,0,0,substr($strDateFrom,5,2),     substr($strDateFrom,8,2),substr($strDateFrom,0,4));
    $iDateTo = mktime(1,0,0,substr($strDateTo,5,2),     substr($strDateTo,8,2),substr($strDateTo,0,4));

    if ($iDateTo >= $iDateFrom)
        {
        array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry

        while ($iDateFrom<$iDateTo)
            {
          $iDateFrom += 86400; // add 24 hours
          array_push($aryRange,date('Y-m-d',$iDateFrom));
            }
        }

    return $aryRange; //Returns to step 1 and adds another value into the array
    }


$d = "SELECT startdate, enddate FROM classdetails";
$f = mysql_query($d);

while ($e = mysql_fetch_array($f)) 
    {
    while (list($g, $h) = each($e)) { $$g = $h; } 
        {
        $aryDates = createDateRangeArray($startdate,$enddate);
        print_r($aryDates);
        echo "<br />";
        }
    }

function createDateRangeArray($strDateFrom,$strDateTo) //Changes a Range of Dates to Specific Dates { $aryRange = array(); //Creates an Array $iDateFrom = mktime(1,0,0,substr($strDateFrom,5,2), substr($strDateFrom,8,2),substr($strDateFrom,0,4)); $iDateTo = mktime(1,0,0,substr($strDateTo,5,2), substr($strDateTo,8,2),substr($strDateTo,0,4)); if ($iDateTo >= $iDateFrom) { array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry while ($iDateFrom<$iDateTo) { $iDateFrom += 86400; // add 24 hours array_push($aryRange,date('Y-m-d',$iDateFrom)); } } return $aryRange; //Returns to step 1 and adds another value into the array } $d = "SELECT startdate, enddate FROM classdetails"; $f = mysql_query($d); while ($e = mysql_fetch_array($f)) { while (list($g, $h) = each($e)) { $$g = $h; } { $aryDates = createDateRangeArray($startdate,$enddate); print_r($aryDates); echo "<br />"; } }
对于那些想知道的人,我确实包含了我的一些工作的参考资料,即使经过大量修改。

正如您所看到的,问题在于,一旦创建了数组,它就会创建一个新数组。我已经尝试过使用ifelse语句,empty(),isset(),增量(甚至不知道如何使用它们,只是想了很久并删除了它。)

那么,我能在这做什么?

我总是得到的是(我只有2行虚拟数据):

问题在于循环本身。第一个例子做了它容忍的事情。第二个实例,$ aryDates刚刚被替换。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

while (list($g, $h) = each($e)) { $$g = $h; } 
好的上帝哦。不要使用变量变量。特别是当你有一个非常好的数组由mysql fetch调用生成时。这就是为什么你在调试代码时遇到问题。

你可以像这样重写while循环

while ($e = mysql_fetch_array($f)) {
    $aryDates = createDateRangeArray($e['startdate'],$e['enddate']);
    print_r($aryDates);
    echo "<br />";
}

更易读,更容易理解正在发生的事情,绝对不需要变量变量。

你的忏悔是湿漉漉的面条500睫毛,同时重复以下口头禅:“我不会使用变量变量”

除此之外,当然它每次创建一个新数组,你将它告诉你createDateRange函数的顶部:

$aryRange = array(); //Creates an Array

如果要在多个函数调用上重用相同的数组,请将其设为静态变量:

static $aryRange = array();

将在连续的调用中保留它,然后让你追加每个调用的日期。