Переместить элемент массива вверх\вниз

pistol

Новичок
Переместить элемент массива вверх\вниз

Например, есть такой ассоциативный массив:

Код:
array( 
'1231' => 'значение 1231', 
'3434' => 'значение 3434', 
'9349' => 'значение 9349', 
'8320' => 'значение 8320' 
);
также известен ключ одного элемента этого массива, пусть будет '9349'. Необходимо перенести этот элемент на 1 элемент вверх, тоесть поменять местами с '3434'.

Вопрос - как попроще это сделать. Не нашел подходящей функции, пожалуйста, наведите на верный путь. Заранее спасибо.
 

x-yuri

Новичок
пересоздать массив в нужном порядке ;-) шучу

-~{}~ 05.01.09 21:46:

тебе надо только значение переместить или вместе с ключом?

-~{}~ 05.01.09 21:48:

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

x-yuri

Новичок
во втором - значения с ключами. Т.е. создать дополнительный массив, который будет определять порядок
 

x-yuri

Новичок
А для чего это нужно, если не секрет?
в php нельзя рассчитывать на некоторый порядок элементов в массиве и менять его самому нельзя. Если индексы числовые, то они могут определять порядок элементов
 

pistol

Новичок
Спасибо, ребята, буду делать.
А для чего это нужно, если не секрет?
Этот массив я беру из файла (там он хранится сериализованный), этот массив - что-то вроде списка разделов сайта, у каждого раздела свой ид (ключ). Необходимо перемещать эти элементы вверх\вниз, чтобы они отображались в нужном порядке при выводе меню.
 

Beavis

Banned
Автор оригинала: x-yuri
в php нельзя рассчитывать на некоторый порядок элементов в массиве и менять его самому нельзя. Если индексы числовые, то они могут определять порядок элементов
вот именно что нельзя.. я поэтому и спрашиваю для чего нужно то, что нельзя.

Автор, в твоем случае, я бы лучше хранил массив вида:
array(
0 => array("order" => 1, "label" => "item1"),
1 => array("order" => 2, "label" => "item2"),
2 => array("order" => 3, "label" => "item3"),
)
и делал сортировку по полю order перед тем как выводить.
 

pistol

Новичок
Автор оригинала: Beavis
вот именно что нельзя.. я поэтому и спрашиваю для чего нужно то, что нельзя.

Автор, в твоем случае, я бы лучше хранил массив вида:
array(
0 => array("order" => 1, "label" => "item1"),
1 => array("order" => 2, "label" => "item2"),
2 => array("order" => 3, "label" => "item3"),
)
и делал сортировку по полю order перед тем как выводить.
Да, я тоже это понял, когда наткнулся на проблему сортировки. Теперь, когда мегабайт кода позади, придется многое менять по мелочи, если изменить структуру данного массива. Но, похоже, так и сделаю.
 

dimagolov

Новичок
pistol, а что, у списка раздела сайта может быть не один порядок вывода в меню? зачем их куда-то двигать вместо того, чтобы положить именно в том порядке, в котором необходимо?
 

pistol

Новичок
pistol, а что, у списка раздела сайта может быть не один порядок вывода в меню? зачем их куда-то двигать вместо того, чтобы положить именно в том порядке, в котором необходимо?
Разделы постоянно добавляются, все новые ставятся в конец списка. Необходимо иметь возможность ставить каждый раздел выше\ниже. Меню вертикальное, и как-бы логично, если важные разделы будут сверху, а пустяковые снизу. Вся эта важность может меняться со временем.

скорее всего этот список лучше даже в бд хранить
Тоже верно, но это уже сложнее будет. Контент в базе хранится, а менюшка в файле. Вначале думал все простенько будет - переварил массив foreach'ем и вывел менюшку. Потом уже усовершенствование понадобились.
 

x-yuri

Новичок
Разделы постоянно добавляются, все новые ставятся в конец списка. Необходимо иметь возможность ставить каждый раздел выше\ниже. Меню вертикальное, и как-бы логично, если важные разделы будут сверху, а пустяковые снизу. Вся эта важность может меняться со временем.
сохраняй в файл в нужном порядке, как уже предложили
 

dimagolov

Новичок
дополню
pistol, согласись, проще и умнее ОДИН раз про добавлении вставить в нужном порядке, чем делать это каждый раз при отображении меню, то есть при каждом обращенни к сайту.
 

x-yuri

Новичок
так вот твой редактор и будет заниматься тем, что сохранять в файле массив в нужном порядке
 

dimagolov

Новичок
pistol, раз ты пишешь редактор разделов, то и сделай по-людски. Например с помощью БД с полем сортировки разделов. А при выводе делай ORDER BY (поле сортировки надо конечно индексировать). Процедура редактирования разделов крайне редка в сравнении с запросом списка меню, поэтому не суть важно как быстро она будет отрабатываться.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: x-yuri
в php нельзя рассчитывать на некоторый порядок элементов в массиве и менять его самому нельзя
Можно рассчитывать на порядок, можно самому менять.

Создавать меню, конечно же, стоит, как советует dimagolov
 
Сверху