Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Распределение чисел
 
 автор: TetRiska   (03.05.2011 в 15:21)   письмо автору
 
 

Всем привет. Помогите мне распределить числа по следующей схеме. Имеем 27 (остаток ширины) блока. Нужно ее распределить между внутренними блоками. Всего блоков допустим 4. Собственно перед первым мы не должны ставить отступ, а ставим между остальными тремя. Расстояния должны быть примерно такими: 9 9 9....Ну это в общем легко. А если будет 26, то в результате должно выйти: 8 9 9 или 9 8 9 или 9 9 8. Где меньшее число роли не играет. Распределение должно быть в цикле естественно. Спасибо.

  Ответить  
 
 автор: Lotanaen   (03.05.2011 в 15:36)   письмо автору
 
   для: TetRiska   (03.05.2011 в 15:21)
 

а количество внутренних блоков заранее известно?

  Ответить  
 
 автор: TetRiska   (03.05.2011 в 15:43)   письмо автору
 
   для: Lotanaen   (03.05.2011 в 15:36)
 

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

П.С. нужно еще распределять так, чтобы не был большой разброс между цифрами, т.е. вариант 7 10 9 не подойдет, а нужно 8 9 9

  Ответить  
 
 автор: Lotanaen   (03.05.2011 в 15:59)   письмо автору
 
   для: TetRiska   (03.05.2011 в 15:43)
 

$DeltaMid = intval($width/($amount-1));
$Delta = $width%($amount-1);
for ($i=0;$i<$amount-1;$i++) {

    if ($Delta >0)
        $ArrayDelta[] = $DeltaMid + 1;
    else
        $ArrayDelta[] = $DeltaMid;
    
    $Delta = $Delta - 1;
}


В массиве все нужные вам отступы.
Результат будет например 9 9 8, т.е. сначала большие значения, потом на единицу меньшие.

  Ответить  
 
 автор: TetRiska   (03.05.2011 в 16:07)   письмо автору
 
   для: Lotanaen   (03.05.2011 в 15:59)
 

спасибо Вам, применил так:
$width=26;
$amount=4;

$DeltaMid = intval($width/($amount-1));
$Delta = $width%($amount-1);
for ($i=0;$i<$amount;$i++) {

    if ($Delta >0)
        $ArrayDelta[] = $DeltaMid + 1;
    else
        $ArrayDelta[] = $DeltaMid;
    
    $Delta = $Delta - 1;
}

print_r($ArrayDelta);

результат
Array ( [0] => 9 [1] => 9 [2] => 8 [3] => 8 ) 

а как чтобы в первом индексе не было числа а был допустим ноль? т.к. первому блоку ненужен отступ, примерно так:
Array ( [0] => 0 [1] => 9 [2] => 9 [3] => 8 ) 

  Ответить  
 
 автор: TetRiska   (03.05.2011 в 16:09)   письмо автору
 
   для: TetRiska   (03.05.2011 в 16:07)
 

пардон:) не заметил изменения, сейчас
Array ( [0] => 9 [1] => 9 [2] => 8 ) 

а как бы так?
Array ( [0] => 0 [1] => 9 [2] => 9 [3] => 8 ) 

  Ответить  
 
 автор: Lotanaen   (03.05.2011 в 16:10)   письмо автору
 
   для: TetRiska   (03.05.2011 в 16:07)
 

$width=26;
$amount=4;

$DeltaMid = intval($width/($amount-1));
$Delta = $width%($amount-1);
$ArrayDelta[] = 0;
for ($i=0;$i<$amount;$i++) {

    if ($Delta >0)
        $ArrayDelta[] = $DeltaMid + 1;
    else
        $ArrayDelta[] = $DeltaMid;
    
    $Delta = $Delta - 1;
}

print_r($ArrayDelta);

перед циклом нулевое значение в массив добавим просто...

  Ответить  
 
 автор: TetRiska   (03.05.2011 в 16:16)   письмо автору
 
   для: Lotanaen   (03.05.2011 в 16:10)
 

большое спасибо :)

  Ответить  
 
 автор: Lotanaen   (03.05.2011 в 17:10)   письмо автору
 
   для: TetRiska   (03.05.2011 в 16:16)
 

только цикл все же нужно на единичку уменьшить - как я изначально вам писал

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования