В то время как цикл делает слишком много массивов - PullRequest
0 голосов
/ 31 декабря 2010

Мне нужна помощь, сильно.То, что я делаю сейчас, это сборщик дат.Довольно много обновлений для моего собственного использования.

Мне нужно было заблокировать определенные диапазоны дат.Я нашел код для этого, и он использует массивы.Мне это нравится.

Тогда мне нужен был способ создания массива с каждой датой в диапазоне, потому что я только вводил дату начала и дату окончания.Нашел один.Работает как шарм.

Но теперь у меня проблема.Создает новый массив, используя тот же $.Таким образом, единственный массив, который регистрирует календарь, является самым новым.По сути, мне нужен всего лишь 1 массив.

Я пробовал несколько вещей, но, похоже, ничего не работает.Давно думал об этом.Любая помощь?</p> <pre><code>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 (), increments (даже не знал, как их использовать, просто долго думал и удалил их).

Итак, что я могу сделатьздесь?

Что я всегда получаю (у меня только 2 строки фиктивных данных):

Array ( [0] => 2010-12-16 [1] => 2010-12-17 [2] => 2010-12-18 [3] => 2010-12-19 [4] => 2010-12-20 [5] => 2010-12-21 [6] => 2010-12-22 [7] => 2010-12-23 )<br> Array ( [0] => 2010-12-25 [1] => 2010-12-26 [2] => 2010-12-27 [3] => 2010-12-28 [4] => 2010-12-29 )

Проблема заключается в самом цикле.Первый экземпляр делает то, что допустимо.Второй экземпляр, $ aryDates, просто заменяется.

Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 31 декабря 2010
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();

, который сохранит его при последующих вызовах, что позволит вам добавлять даты каждого вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...