Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перемещение строк вдоль таблицы, Проблема перемещения закрепленных внутри 
:(
    Опции темы
Zmiuko
Дата 14.3.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Прости косноязычие. Чтобы можно было допусти при поднятии вверх, достигнув начала перескочить в конец, а также при опускании перескочить в начало.
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 14.3.2009, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

function move($arr_line, $line, $up = false)
{
    if($line < 0 || $line > count($arr_line)-1)
        return $arr_line;
    $mode = $arr_line[$line][3];
    $move = $up ? -1 : 1;
    if($mode) return $arr_line;
    $c_line = $line;
    do
    {
        $m = $arr_line[$c_line][3];
        $c_line += $move;
        if($c_line < 0 && $up) $c_line = count($arr_line) - 1;
        if($c_line > count($arr_line) - 1 && !$up) $c_line = 0;
        
        //if($m && (($c_line == count($arr_line)-1 && !$up) || ($c_line < 0 && $up))) return $arr_line;
    }while($arr_line[$c_line][3]);
    $tmp = $arr_line[$c_line];
    $arr_line[$c_line] = $arr_line[$line];
    $arr_line[$line] = $tmp;
    return $arr_line;
}

PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 14.3.2009, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



То есть было:

$base = array(
array("данные #1","данные #1","данные #1","0"),
array("данные #2","данные #2","данные #2","1"),
array("данные #3","данные #3","данные #3","0"),
array("данные #4","данные #4","данные #4","1"),
array("данные #5","данные #5","данные #5","1"),
array("данные #6","данные #6","данные #6","0")
);

Мы "подняли" первую запись вверх и получили:

$base = array(
array("данные #6","данные #6","данные #6","0"),
array("данные #2","данные #2","данные #2","1"),
array("данные #3","данные #3","данные #3","0"),
array("данные #4","данные #4","данные #4","1"),
array("данные #5","данные #5","данные #5","1"),
array("данные #1","данные #1","данные #1","0")
);

или наоборот "опустили".

Аналогично было бы если самая первая закреплена:

$base = array(
array("данные #1","данные #1","данные #1","1"),
array("данные #2","данные #2","данные #2","1"),
array("данные #6","данные #6","данные #6","0"),
array("данные #4","данные #4","данные #4","1"),
array("данные #5","данные #5","данные #5","1"),
array("данные #3","данные #3","данные #3","0")
);

, первая закреплена, тогда третья переходит на место шестой, а шестая на место третьей ))

Добавлено через 23 секунды
Извини, не прочел предыдущее ))

Добавлено через 2 минуты и 25 секунд
))))))))))))))))) Слух, парень, спасибо тебе! Я два года не занимался пыхом - голова поэтому пухнет, и первый цикл что я привел для примера - в далеком 2004 году придумали... спасибо тебе огромнейшее! ))
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 14.3.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Все так и есть smile 
PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 14.3.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



А можно описать последнее?

Допустим, если внедрить кроме 1, которая закрепляет сообщение и их обездвиживает, еще и 2... которая отвечает еще за те что по-убыванию крепятся только сверху:

Было:

$base = array(
array("данные #1","данные #1","данные #1","0"),
array("данные #2","данные #2","данные #2","1"),
array("данные #3","данные #3","данные #3","0"),
array("данные #4","данные #4","данные #4","1"),
array("данные #5","данные #5","данные #5","2"),
array("данные #6","данные #6","данные #6","0"),
array("данные #7","данные #7","данные #7","1"),
array("данные #8","данные #8","данные #8","1"),
array("данные #9","данные #9","данные #9","2"),
array("данные #10","данные #10","данные #10","2"),
array("данные #11","данные #11","данные #11","0")
);

А стало:

$base = array(
array("данные #5","данные #5","данные #5","2"),
array("данные #9","данные #9","данные #9","2"),
array("данные #10","данные #10","данные #10","2"),
array("данные #1","данные #1","данные #1","0"),
array("данные #2","данные #2","данные #2","1"),
array("данные #6","данные #6","данные #6","0"),
array("данные #4","данные #4","данные #4","1"),
array("данные #3","данные #3","данные #3","0"),
array("данные #7","данные #7","данные #7","1"),
array("данные #8","данные #8","данные #8","1"),
array("данные #11","данные #11","данные #11","0")
);

, после того как мы третье сообщение передвинули вниз?

или легче сначала выдирать сравнением все с двойками и вставлять в начало обработанного функцией массива?... хотя интересна возможность в функции..
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 14.3.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



те, что с двойками, всегда должны быть сверху?
Тогда с единицами записи будут смещаться, что противоречит условию =)
PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 14.3.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Тогда выходит, что требуется обработка массива до начала работы функции?

Получается, пробегаем по массиву циклом выдераем все что с двойками, оставшееся обрабатываем нашей функцией, а затем присоединяем к началу массива то что отобрали?... просто думаю, как лучше ))

Добавлено через 9 минут и 14 секунд
И уточняющий вопрос "чайника" ))))) на пятой, а уже скорее всего скоро будет шестая версия пыха, данная функция пойдет? ))
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 14.3.2009, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

function move($arr_line, $line, $up = false)
{
    $arr = array();
    foreach($arr_line as $v)
        if($v[3] == 2)
            $arr[0][] = $v;
        else
            $arr[1][] = $v;
    $arr[0] = array_reverse($arr[0]);        
    $arr_line = $arr[1];
    if($line < 0 || $line > count($arr_line)-1)
        return $arr_line;
    $mode = $arr_line[$line][3];
    $move = $up ? -1 : 1;
    if($mode) return $arr_line;
    $c_line = $line;
    do
    {
        $m = $arr_line[$c_line][3];
        $c_line += $move;
        if($c_line < 0 && $up) $c_line = count($arr_line) - 1;
        if($c_line > count($arr_line) - 1 && !$up) $c_line = 0;
    }while($arr_line[$c_line][3]);
    $tmp = $arr_line[$c_line];
    $arr_line[$c_line] = $arr_line[$line];
    $arr_line[$line] = $tmp;
    foreach($arr[0] as $v)
     array_unshift($arr_line, $v);
    return $arr_line;
}

На шестой версии, скорей всего будет работать, обещанные изменения, вышеприведенную функцию, насколько я помню не коснутся.
Да и не используется здесь ничего, кроме пары функций для работы с массивами и операторов.
Добавлено @ 01:31
Цитата(Zmiuko @  14.3.2009,  00:58 Найти цитируемый пост)
на пятой

э.. у вас 4 версия?

Это сообщение отредактировал(а) enof - 14.3.2009, 01:32
PM MAIL ICQ Skype   Вверх
Zmiuko
Дата 14.3.2009, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


http://zmiuko.ru
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 8.10.2008

Репутация: 2
Всего: 2



Сервер 4-ой и отдельно 5-ой, на всех тестирую, поскольку к примеру обработка некоторых методов отсыла PNG формата из флеш клипа в 4-й и 5-й версиях сурово отличаются... Хотя зря бил панику - все урегулирывается снятием флажка в конфиге через htaccess ))) А так, прав, все старо как мир )) Спасибо, что потратил время на мои маразмы, дай бог тоже когда-нить помогать чем-то существенным буду )))

Добавлено через 6 минут и 28 секунд
Вторая функция, было:

Код

$base = array(
array("данные #1","данные #1","данные #1","0"),
array("данные #2","данные #2","данные #2","1"),
array("данные #3","данные #3","данные #3","0"),
array("данные #4","данные #4","данные #4","1"),
array("данные #5","данные #5","данные #5","2"),
array("данные #6","данные #6","данные #6","1"),
array("данные #7","данные #7","данные #7","2"),
array("данные #8","данные #8","данные #8","2"),
array("данные #9","данные #9","данные #9","1"),
array("данные #10","данные #10","данные #10","1"),
array("данные #11","данные #11","данные #11","0"),
array("данные #12","данные #12","данные #12","0")
);


Стало:

Код

данные #1-данные #1-данные #1-0
данные #2-данные #2-данные #2-1
данные #3-данные #3-данные #3-0
данные #4-данные #4-данные #4-1
данные #6-данные #6-данные #6-1
данные #9-данные #9-данные #9-1
данные #10-данные #10-данные #10-1
данные #11-данные #11-данные #11-0
данные #12-данные #12-данные #12-0


Все отлично идет, пока не начинаешь обрабатывать 10, 11 и 12 записи...

Добавлено через 9 минут и 29 секунд
Ошибка, наверное из-за того, что из массива выносим записи с двойками, а считаем массив (количество записей) вместе с ним.

Добавлено через 10 минут и 39 секунд
Нет, не из-за этого... хм..  smile 
PM MAIL WWW ICQ Skype Jabber   Вверх
enof
Дата 14.3.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

function move($arr_line, $line, $up = false)
{
    if($arr_line[$line][3]) return $arr_line;
    if($line < 0 || $line > count($arr_line)-1) return $arr_line;
    $arr = array();
    foreach($arr_line as $k=>$v)
        if($v[3] == 2)
        {
         $arr[0][] = $v;
         if($k < $line) $line--;
        }
        else
            $arr[1][] = $v;
    $arr[0] = array_reverse($arr[0]);        
    $arr_line = $arr[1];
    $move = $up ? -1 : 1;
    $c_line = $line;
    do
    {
        $m = $arr_line[$c_line][3];
        $c_line += $move;
        if($c_line < 0 && $up) $c_line = count($arr_line) - 1;
        if($c_line > count($arr_line) - 1 && !$up) $c_line = 0;
    }while($arr_line[$c_line][3]);
    $tmp = $arr_line[$c_line];
    $arr_line[$c_line] = $arr_line[$line];
    $arr_line[$line] = $tmp;
    foreach($arr[0] as $v)
        array_unshift($arr_line, $v);
    return $arr_line;
}

PM MAIL ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1006 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.