сортировка массива по ключам другого PHP

H2
На сайте с 07.02.2012
Offline
21
7276

на странице выводится плейлист пользователя, который он может редактировать (удалять и менять местами треки)

сам плейлист лежит на сервере в массиве, каждый трек имеет свой ключ, пример


old_tracks=array("0"=>"track 1", "1"=>"track 2", "2"=>"track 3");

когда пользователь меняет местами треки, их ключи меняются и отправляется новый список на сервер в виде:


tracks=array(0, 2, 1);

это новый порядок расположения треков в массиве

как теперь отсортировать old_tracks, так что-бы в конечном итоге массив имел вид:


new_tracks=array("0"=>"track 1", "1"=>"track 3", "2"=>"track 2");

я думаю, что проблему можно решить с помощью array_combine()?

Заранее спасибо.

дани мапов
На сайте с 06.09.2012
Offline
204
#1
Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
T
На сайте с 19.09.2012
Offline
29
#2
http23:
на странице выводится плейлист пользователя, который он может редактировать (удалять и
как теперь отсортировать old_tracks, так что-бы в конечном итоге массив имел вид:

new_tracks=array("0"=>"track 1", "1"=>"track 3", "2"=>"track 2");

я думаю, что проблему можно решить с помощью array_combine()?

array_combine() сводит два параллельных линейных массива, в одном только ключи, в другом только значения.

В вашем случае поможет простенький цикл, ну во всяком случае, как один из вариантов решения.


<?php
$old_tracks=array("0"=>"track 1", "1"=>"track 2", "2"=>"track 3");
$tracks=array(0, 2, 1);
$new_tracks=array();
foreach($tracks as $idx)
{
$new_tracks[] = $old_tracks[$idx];
}

// $new_tracks будет содержать то, что надо
H2
На сайте с 07.02.2012
Offline
21
#3
turen:
array_combine() сводит два параллельных линейных массива, в одном только ключи, в другом только значения.
В вашем случае поможет простенький цикл, ну во всяком случае, как один из вариантов решения.


<?php
$old_tracks=array("0"=>"track 1", "1"=>"track 2", "2"=>"track 3");
$tracks=array(0, 2, 1);
$new_tracks=array();
foreach($tracks as $idx)
{
$new_tracks[] = $old_tracks[$idx];
}

// $new_tracks будет содержать то, что надо

спасибо, да уже решил проблему циколом


$new_sort=(array)$_POST["mass"];
$new_pl=array();
$tracks=json_decode(file_get_contents($pl_path));
for ($a=0; $a<count($tracks->tracks); $a++){
$new_pl[$a]=$tracks->tracks[$new_sort[$a]];
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий