Помогите, не могу найти решения как вывести ближайшую группу значений. К примеру содержание таблицы: id|day 1|1 2|8 3|14 4|21 5|22 6|26 7|27 8|28 смысл вывести группу значений day 21,22,26,27,28 указав максимальный интервал day группировки т.е.к примеру интервал задаем 2 и он уже делит на 2 группы чисел 21, 22 и 26,27,28 потому что между 22 и 26 числом не 2 дня)) или ставим интервал 4 и он выводи нам всю группу чисел 21,22,26,27,28. Думаю смысл понятен)) прошу помощи в решении данной ситуации) Добавлено спустя 6 минут 41 секунду: ой чуть не забыл day 1,8,14 тоже должны выводиться но каждое число это отдельная группа, поскольку у них нет ближайших по интервалу чисел. к примеру если мы укажем интервал 2 (|- разделитель): 1 | 8 | 14 | 21,22 | 26,27,28 | вот что должно получиться в итоге))
Код (PHP): <pre> <?php $rows = array( 1 => 1, 2 => 8, 3 => 14, 4 => 21, 5 => 22, 6 => 26, 7 => 27, 8 => 28 ); $inGroup = 2; $groups = array(); $groupNum = 0; $prevDay = 0; foreach($rows as $id => $day) { if(($day - $prevDay) > $inGroup) $groups[++$groupNum] = array($day); else $groups[$groupNum][] = $day; $prevDay = $day; } print_r($groups); ?> </pre> Добавлено спустя 1 минуту 31 секунду: А как сделать одним MySQL - не исключаю, что это возможно, но это надо напрячься и подумать, что как-то неохота сейчас...
Получается)))) немогу кей заменить на айдишник $rows = Array ( [491] => 21 [492] => 22 [493] => 23 [494] => 24 ) а в итоге выводит: Array ( [1] => Array ( [0] => 21 [1] => 22 [2] => 23 [3] => 24 ) ) без оригинальных айди, которые мне нужно выводить)) как их там прописать?
Код (PHP): <pre> <?php $rows = array( 1 => 1, 2 => 8, 3 => 14, 4 => 21, 5 => 22, 6 => 26, 7 => 27, 8 => 28 ); $inGroup = 2; $groups = array(); $groupNum = 0; $prevDay = 0; foreach($rows as $id => $day) { if(($day - $prevDay) > $inGroup) $groups[++$groupNum] = array($id => $day); else $groups[$groupNum][$id] = $day; $prevDay = $day; } print_r($groups); ?> </pre> Добавлено спустя 3 минуты 9 секунд: Если ты про то, как выбрать из базы, чтобы ID использовались в качестве ключей массива - то, например, так: Код (PHP): $sql = "SELECT `id`, `day` FROM `table` ORDER BY `day`"; $res = mysql_query($sql, $db); $rows = array(); if(mysql_num_rows($res) > 0) { while($row = mysql_fetch_row($res)) $rows[$row[0]] = $row[1]; }
не, они у меня уже выводятся как ключи: я их так соединил: while ($row2 = mysql_fetch_assoc($result2)) { $iddd[] = $row2['event_id']; $ro[] = $row2['event_day']; } print_r($rows = array_combine($iddd, $ro)); принт р выдает это: Array ( [491] => 21 [492] => 22 [493] => 23 [494] => 24 ) далее идет код: $inGroup = 2; $groups = array(); $groupNum = 0; $prevDay = 0; foreach($rows as $id => $day) { if(($day - $prevDay) > $inGroup) $groups[++$groupNum] = array($id => $day); else $groups[$groupNum][$id] = $day; $prevDay = $day; } print_r($groups); прнт р выдает следующее: Array ( [1] => Array ( [0] => 21 [1] => 22 [2] => 23 [3] => 24 ) ) тоесть он ключи тупо не подставил, немогу найти куда их там впихнуть))
По идее должны были сохраниться ключи... Точно обновил скрипт на сервере? Просто вот например такой код: Код (PHP): <pre> <?php $rows = array( 3 => 1, 7 => 8, 15 => 14, 21 => 21, 82 => 22, 35 => 26, 11 => 27, 92 => 28 ); $inGroup = 2; $groups = array(); $groupNum = 0; $prevDay = 0; foreach($rows as $id => $day) { if(($day - $prevDay) > $inGroup) $groups[++$groupNum] = array($id => $day); else $groups[$groupNum][$id] = $day; $prevDay = $day; } print_r($groups); ?> </pre> выдаёт мне такой результат: Код (Text): Array ( [0] => Array ( [3] => 1 ) [1] => Array ( [7] => 8 ) [2] => Array ( [15] => 14 ) [3] => Array ( [21] => 21 [82] => 22 ) [4] => Array ( [35] => 26 [11] => 27 [92] => 28 ) )
скопировал твой последний код все заработало))) видимо я мог я ге то затереть когда пытался прописать туда id вместо кея)) спасибо огромное))