|
|
|
| Народ подскажите не догоняю.
Есть массив:
Array ( [0] => 29 [1] => 30 [2] => 31 [3] => 32 [4] => 33 [5] => 34 [6] => 35 )
Как переставить ключи со значениями?
Например поменять местами Ключ 0 с Ключем1
Что б было так:
Array ( [1] => 30 [0] => 29 [2] => 31 [3] => 32 [4] => 33 [5] => 34 [6] => 35 | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 12:43)
| | не стоит закладыватся на логику, которая определяется порядком ключей в массиве (а не их значениями) - тем более, в ситуации, когда этот порядок значениям ключей не отвечает. | |
|
|
|
|
|
|
|
для: Trianon
(22.02.2011 в 12:46)
| | А со значениями как? Я просто не могу уловить суть как это сделать | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 12:48)
| | исходная строка у вас упорядочена по значениям (ключей).
Чтобы предложить что-то иное, нужно выяснить, откуда взялся новый порядок. | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 12:48)
| | А в чем логика такой перестановки? Нужно отсортировать значения или вывести их в каком-то порядке, т.е. в чем конечная цель? | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 12:43)
| | Хм... скорее всего придется из элементов первого массива собирать новый вручную или в полуавтоматическом варианте, если таких перестановок нужно осуществить несколько (вообще на это полагаться не принято, Trianon дело говорит). А в связи с чем возникла такая задача, может каким-то другим путем воспользоваться можно? | |
|
|
|
|
|
|
|
для: cheops
(22.02.2011 в 12:47)
| | Народ боюсь вас щас запутать.
Но вот собственно какая задача.
Из Таблицы выводятся в одну колонку значения(в том порядке в котором они были записаны).
Ну например так.
Адрес
Номер заявки
Телефон
Модель
Не всегда их порядок вывода на экран удобен для пользователя.
По этому есть необходимость рядом с каждым выводимым элементом сделать срелку "Вниз" и "Вверх" что бы они могли перемещаться друг относительно друга.
Суть идеи что бы изменить их порядок расположения в таблице.
Что бы на пример при нажатии на кнопку "Вверх" ,элемент с большим ID перезаписывался на место ID с мегьшим значением.
Например есть так
ID1-Адрес
ID2-Номер заявки
ID3-Телефон
ID4-Модель
а нужно например так
ID1-Номер заявки
ID2-Модель
ID3-Адрес
ID4-Телефон
Надеюсь понятно обрисовал картину. | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 13:04)
| | Главный вопрос: А откуда изначально берутся данные? Из файла, базы данных?
Второстепенный вопрос: Порядок заданный пользователем запоминается для каждого пользователя или администратор сайта выставляет этот порядок для всех? Или же этот порядок устанавливается только в рамках сессии и при следующем заходе на сайт его нужно будет устанавливать по-новой? | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 13:04)
| | >Не всегда их порядок вывода на экран удобен для пользователя.
>По этому есть необходимость
Добавляется отдельный столбик с порядком.
По умолчанию он заполняется нарастающим рядом чисел.
При нажатии на кнопи изменения порядка, обработчик меняет значения в поле этого столбика для тех строк, которые перемещаются вверх или вниз.
Вывод списка выполняется всегда согласно значениям в этом столбике.
Да, если порядок индивидуален для некоторого пользователя - столбик размещается в отдельной таблице связи между таблицей данных и таблицей пользователей. | |
|
|
|
|
|
|
|
для: Trianon
(22.02.2011 в 13:33)
| | Данные изначально берутся из таблицы.
Заданные изменения не привязываются к сессии, и распространяются на конкретную организацию(а уж в ней пользователи).
Т.е может быть несколько справочников для каждой фирмы свой со своими реквизитами.
Да можно было бы сделать отдельный столбик,но все дело в том что у меня есть соответствия(id справочника и id организации) и все это в одной таблице. Может быть несколько организаций и каждой свой свой набор справочников, соответственно доп столбик тут не катит.
Что бы это реализовать надо несколько таблиц соответствия делать по каждую фирму. Что не очень хочеться
Поэтому то идея была
Запихать нужные ID записи в массив.
Так как на странице конкретного пользователя выводятся нужные только ему записи, то мы получаем актуальный массив.
Т.е получаеться массив типа:
1=>id2
2=>id3
4=>id4
ну и т.д
Далее тыкая на кнопку например "Вверх", для записи id4. Что бы id4 поменялаcь местами c id3
Ищем в массиве ближайший элемент который меньше id4 по значению и момент нахождения меняем значения в таблице
Ну например по такой логике:
Сохранить значения id3 во временной таблице
Взять значения id4 и обновить id3
Из временной таблицы вытягиваем значения id3
И обновляем значения в id4.
Обнуляем временную таблицу. | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 14:45)
| | таблица соответствия делается одна.
И в ней достаточно ключевых полей, чтобы однозначно определить положение конкретной записи для конкретного пользователя. (good_id, user_id, position)Tckb у пользjdfnTckьЕсли
быть открыто несколько таких списков (например, несколько заказов) - ( good_id, order_id, position) | |
|
|
|
|
|
|
|
для: Trianon
(22.02.2011 в 14:53)
| | Щас попробую | |
|
|
|
|
|
|
|
для: Eser
(22.02.2011 в 13:04)
| | Такую сортировку написать не сложно, в смысле, указывая новый порядковый номер (значение сортировки) каждому элементу списка. Но более удобно такие сортировки делать с мощью JavaScript, например, для jQuery есть много плагинов сортировок все и вся, при получении данных останется только обновить поле сортировки. Уиникальный идентификатор зачем трогать. | |
|
|
|
|
|
|
|
для: sim5
(22.02.2011 в 17:08)
| | Спасибо за советы на будущее очень пригодяться.
Но пока сделал через буферную таблицу мож кому пригодиться:
Это пока черновик но вроде работает.
Где $_GET['down'] и $_GET['up'] это id записей
if(isset($_GET['down']))
{
$value=$_GET['down'];
asort($array);
$rez=FALSE;
while($avalue=current($array)) {
if($avalue<$value) {
next($array); continue;
} elseif($avalue==$value) {
$rez=next($array); break;
}
}
if((( !$rez) ? $close='Это последний элемент':""));
if(!isset($close))
{
$select1=mysql_query("select name,type,status from atribute where id='$rez';");//Значания заменяемого эл
$data1=mysql_fetch_array($select1);
$update=mysql_query("update bufer_atribute set name='$data1[name]',type='$data1[type]',status='$data1[status]' where id='1';");//Переносим в буффер значания заменяемого эл
$select2=mysql_query("select name,type,status from atribute where id='$_GET[down]';");//Значания заменяемого эл
$data2=mysql_fetch_array($select2);
$update=mysql_query("update atribute set name='$data2[name]',type='$data2[type]',status='$data2[status]' where id='$rez';");//Делаем обмен $rez->$_GET[down]
$select3=mysql_query("select name,type,status from bufer_atribute where id='1';");//Переносим из буффера значания заменяемого эл
$data3=mysql_fetch_array($select3);
$update=mysql_query("update atribute set name='$data3[name]',type='$data3[type]',status='$data3[status]' where id='$_GET[down]';");
}
}
if(isset($_GET['up']))
{
$value=$_GET['up'];
asort($array);
$rez=FALSE;
while($avalue=current($array)) {
if($avalue<$value) {
next($array); continue;
} elseif($avalue==$value) {
$rez=prev($array); break;
}
}
if((( !$rez) ? $close='Это верхний элемент':""));
if(!isset($close))
{
$select1=mysql_query("select name,type,status from atribute where id='$rez';");//Значания заменяемого эл
$data1=mysql_fetch_array($select1);
$update=mysql_query("update bufer_atribute set name='$data1[name]',type='$data1[type]',status='$data1[status]' where id='1';");//Переносим в буффер значания заменяемого эл
$select2=mysql_query("select name,type,status from atribute where id='$_GET[up]';");//Значания заменяемого эл
$data2=mysql_fetch_array($select2);
$update=mysql_query("update atribute set name='$data2[name]',type='$data2[type]',status='$data2[status]' where id='$rez';");//Делаем обмен $rez->$_GET[up]
$select3=mysql_query("select name,type,status from bufer_atribute where id='1';");//Переносим из буффера значания заменяемого эл
$data3=mysql_fetch_array($select3);
$update=mysql_query("update atribute set name='$data3[name]',type='$data3[type]',status='$data3[status]' where id='$_GET[up]';");
}
}
|
| |
|
|
|
|
|
|
|
для: Eser
(24.02.2011 в 14:08)
| | Да нет уж, спасибо, что-то слишком много "букав" ). | |
|
|
|