|
|
|
| подскажите, выбираю из базы числа, например выбрали числа:
1, 4, 5, 6, 8, 10, 11, 15
Подскажите как сделать так, что бы я смог их вывести пользователю в виде промежутков, т.е. так:
1, 4-6 , 8 , 10-11, 15
Заранее спасибо. | |
|
|
|
|
|
|
|
для: FaStY
(22.08.2009 в 00:21)
| | Парсить строку, а поможет вам оператор(или как это называется) WHERE `id` BETWEEN 4 AND 7 к примеру | |
|
|
|
|
|
|
|
для: Akdmeh
(22.08.2009 в 00:28)
| | у меня массив с этими числами, с базой это не совсем то - сервер загнется) | |
|
|
|
|
|
|
|
для: FaStY
(22.08.2009 в 00:31)
| | а почему не 1-4, 6-8 и тд? | |
|
|
|
|
|
|
|
для: Valick
(22.08.2009 в 00:53)
| | Вероятно, потому что отсутствуют 2, 3 и 7. | |
|
|
|
|
|
|
|
для: Drago
(22.08.2009 в 01:24)
| | 5 тоже отсутствует
4-6 и 6-8 чем отличаются? | |
|
|
|
|
|
|
|
для: Valick
(22.08.2009 в 01:31)
| | А где вы такие числа в примере увидели?
По-моему, человек вполне доходчего на примере показал, что ему нужно.
Соседне числа максимально группировать.
1, 4, 5, 6, 8, 10, 11, 15
1 стоит на отшиби, т.к. 2х нет.
4, 5, 6 - стоят рядом в бесконечной натуральных чисел, значит объединяем
И тд
Вам такие сокращения никогда не встречались?
А вот по реализации..таких функций готовых я не встречал, но как-то даже логику не могу предложить.. | |
|
|
|
|
|
|
|
для: neadekvat
(22.08.2009 в 01:47)
| | да, я ошибся
тогда всё гораздо проще | |
|
|
|
|
|
|
|
для: Valick
(22.08.2009 в 02:27)
| | примерно так можно сделать, если из массива , и вывести нужно
, только используя each() и current() сделал
с for скобок слишком много бывает ,)
<?php
$array = array(1,3,6,7,8,10,14,15,33,34);
$tmp = 4;
while( list(,$x) = each($array)) {
$y = current($array);
###############################
if(!($tmp & 3)) {
echo ($tmp)? $x : ', '. $x;
$tmp = ($y == $x+1)? 1: 0;
}
else { #########################
if ($y == $x+1) $tmp = 2;
else {
echo ($tmp == 1)? ', '. $x: '-'. $x;
$tmp = 0;
}
}
###############################
}
?>
|
| |
|
|
|
|
|
|
|
для: heed
(22.08.2009 в 04:07)
| | спасибо, все работает. сижу ща разбираюсь в коде, хочу добавить, что бы 1,2 выводило 1-2 | |
|
|
|
|
|
|
|
для: FaStY
(22.08.2009 в 04:41)
| | это как-то нелогично
1-2 это всего два числа 1 и 2
<?php
$array = array(1,3,6,7,8,10,14,15,33,34,44);
$tmp = 0;
while( list($k,$x) = each($array)) {
$y = current($array);
###############################
if(!$tmp) {
echo ($k)? ', '. $x : $x;
if ($y == $x+1) $tmp = 1;
}
else { #######################
if ($y == $x+1) continue;
echo '-'. $x;
$tmp = 0;
}
###############################
}
?>
| здесь добавил $k, и первый ключ массива теперь обязательно должен быть 0 | |
|
|
|
|
|
|
|
для: heed
(22.08.2009 в 05:30)
| | блин, чет у меня не получается, не мог бы ты мне помочь. Смотри, у меня масив приходит в таком виде:
т.е. я его форимрую while($row - mysql_fetch_array($result)) в такой вот вид, а потом опять прохожусь по нему тем скриптиком, что ты написал.
<?php
$bets[100] = array('price' => 100, 'time' => 12);
$bets[110] = array('price' => 110, 'time' => 13);
$bets[111] = array('price' => 111, 'time' => 14);
$bets[112] = array('price' => 112, 'time' => 15);
$bets[120] = array('price' => 120, 'time' => 16);
while( list($k,$x) = each($bets)) {
//текущий массив
$y = key($bets);
// если нету у нас временных файлов и это единчиная цифра
if(!$tmp) {
// если у нас есть будущая
if ($y == ($k+1)) {
$tmp = 1;
// print $y .'=='.( $k+1).'<br>';
}
} else { #######################
if ($y == $k+1) {
unset($bets[$k+1]);
continue;
}
$bets[$k]['price'] = ($bets[$k]['price']) . '-'. $x['price'];
$tmp = 0;
}
###############################
}
?>
|
я переделал немного скриптик под мои нужны с ключами, и блин почему-то больше 2ух чисел он не хочет объединять(
еще вопросик. а может это можно сделать сразу же при вытаскивании из базы? т.е. когда я делаю while($row - mysql_fetch_array()) ?
Заранее спасибо. | |
|
|
|
|
|
|
|
для: FaStY
(22.08.2009 в 15:45)
| | не пойму какие именно значения массивов надо преобразовать в такую строку
или нужны ключи ?
>>>
,$x) = each($bets)) {
//текущий массив
$y = key($bets);
Здесь в $x ассоциативный массив с двумя значениями
в $y цифра (ключ)
Там это были текущее значение и текущее значение после сдвига указателя
// было-бы всё понятно если-бы сделали print_r(each($bets));
всегда не хватало похожей функции возвращающей только текущее значение
// upd
>while($row - mysql_fetch_array()) ?
что показывает var_dump($row) ? | |
|
|
|
|
|
|
|
для: heed
(22.08.2009 в 17:37)
| | я опечатался, должно быть while($row = mysql_fetch_array()) ;
var_dump выдает там поля из базы $row = array('price'=>100, time=>'12') ну и в таком духе.
Мне нужно, чтобы у меня формировался массив например из такого:
$row[100] = array('price' => 100, 'time' => 12);
$row[110] = array('price' => 110, 'time' => 13);
$row[111] = array('price' => 111, 'time' => 14);
$row[112] = array('price' => 112, 'time' => 15);
$row[120] = array('price' => 120, 'time' => 16);
|
в такой:
$row[100] = array('price' => 100, 'time' => 12);
$row[112] = array('price' => '110-112', 'time' => 15);
$row[120] = array('price' => 120, 'time' => 16);
|
т.е. удалить
$row[110] = array('price' => 110, 'time' => 13);
$row[111] = array('price' => 111, 'time' => 14);
|
а $row[120] превратить в
$row[112] = array('price' => '110-112', 'time' => 15);
|
| |
|
|
|
|
|
|
|
для: FaStY
(24.08.2009 в 00:11)
| | если на php , обычно у меня получаются такие функции , которые надо вызывать в цикле и после него
<pre><?php
$outrow = array();
$m_resurs[100] = array('price' => 100, 'time' => 12);
$m_resurs[110] = array('price' => 110, 'time' => 13);
$m_resurs[111] = array('price' => 111, 'time' => 14);
$m_resurs[112] = array('price' => 112, 'time' => 15);
$m_resurs[120] = array('price' => 120, 'time' => 16);
function row_delay($row = array('price' => false)) {
# $row текущий массив
global $outrow; # записываемый массив
static $temprow = array('price' => false); # предидуший массив
static $tmp = 0; # первая цифра последовательности
###
if(!$tmp) {
if ($temprow['price']) {
if ($row['price'] == 1 + $temprow['price']) $tmp = $temprow['price'];
else $outrow[] = $temprow;
}
}
else if ($row['price'] != 1 + $temprow['price']) {
$temprow['price'] = $tmp .'-'. $temprow['price'];
$outrow[] = $temprow;
$tmp = 0;
}
$temprow = $row;
###
}// row_delay()
#========================================
foreach($m_resurs AS $row){ // то-же что и while($row = mysql_fetch_array())
row_delay($row);
}
row_delay();
#========================================
print_r($outrow);
?>
| но возможно не будет как нужно работать , если price может быть 0
или ещё чего-нибудь, сильно не думал, ато последние волосы выпадут :) | |
|
|
|
|
|
|
|
для: heed
(24.08.2009 в 11:04)
| | спасибо, затестим) | |
|
|
|