За последние 24 часа нас посетили 49880 программистов и 1757 роботов. Сейчас ищут 912 программистов ...

Как отсортировать данные?

Тема в разделе "PHP для новичков", создана пользователем -Vladimir-, 16 янв 2010.

  1. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    PHP:
    1. <?
    2. $text = "<home><c=1>Строка1
    3. <x=1><y=1><end><home><c=2>Строка2
    4. <x=2><y=3><end><home><c=3>Строка3
    5. <x=3><y=60><end><home><c=4>Строка8<x=4><y=10><end>";
    Как можно отсортировать строки (с <home> до <end>) по значению "y" ?

    Посоветовали создать массив preg_match_all("#\<home>(.+?)\<end>#s",$text,$d); и потом уже что-то делать с ним.
    Подскажите, что здесь можно придумать?
     
  2. WarGot

    WarGot Активный пользователь

    С нами с:
    8 янв 2010
    Сообщения:
    55
    Симпатии:
    0
    Я бы сгенерил массив добавив на основе y ключ значение. А потом сортировал его asort();
     
  3. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    И как его сделать?
    Это генерит массив от <home> до <end>
    preg_match_all("#\<home>(.+?)\<end>#s",$text,$d);
     
  4. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    Что здесь придумать можно?
     
  5. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    порезать на подстроки.
    И получить 2х мерный массив, который затем и посортировать.
     
  6. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    Как на основе "у" ключевое значение сделать?
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ключевое значение где?

    Если у тебя есть уже многомерный массив, то в зависимости от его структуры для сортировки можно воспользоваться

    http://php.net/usort
    http://php.net/array_multisort
     
  8. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    Сейчас с помощью
    Код (Text):
    1. preg_match_all("#\<home>(.+?)\<end>#s",$text,$arr);
    сгенерился массив
    Код (Text):
    1. $arr = array("<home><c=1>Строка1<x=1><y=1><end>", "<home><c=2>Строка2 <x=2><y=3><end>", "<home><c=3>Строка3 <x=3><y=60><end>", "<home><c=4>Строка8<x=4><y=10><end>");
    Как теперь сделать, чтобы отсортировать по y ?
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Парень, это не многомерный массив.

    Но и его ты можешь посортировать по y,
    если сумеешь выцепить значение y регуляркой у отдельного элемента.
     
  10. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    Код (Text):
    1. preg_match_all("#\<home>(.+?)\<y=([0-9]+)\>#s",$text,$arr);
    так что ли?
     
  11. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    -Vladimir-
    Ты не спрашивай так или не так.

    Сделал - запустил - посмотрел результат.
    Если то что ты ожидаешь, то делаешь дальше. Если не "то", то разбираешься почему.
     
  12. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    Это понятное дело.

    Сгенерил многомерный массив:
    PHP:
    1. <?
    2. $content = "<home><c=1>Строка1
    3. <x=1><y=10><end><home><c=2>Строка2
    4. <x=2><y=0><end><home><c=3>Строка3
    5. <x=3><y=0><end><home><c=4>Строка4
    6. <x=4><y=8><end><home><c=5>Строка5
    7. <x=5><y=0><end><home><c=6>Строка6
    8. <x=6><y=0><end><home><c=7>Строка7
    9. <x=7><y=7><end><home><c=8>Строка8<x=8><y=4><end>";
    10.  
    11. $content=preg_replace("/<home><c=([0-9]+)>/", '"[home]', $content);
    12. $content=preg_replace("/<x=([0-9]+)><y=/", '[end]" => "', $content);
    13. $content=preg_replace("><end>", '", ', $content);
    14. $content=preg_replace("/, >/", ', ', $content);
    15. $content=preg_replace('/>"/', '"', $content);
    16. $content2.=$content;
    17. $content2.="777";
    18. $content=preg_replace('/, 777/', "", $content2);
    19.  
    20. //echo $content;
    21.  
    22. $arr = array($content);
    23. ?>
    Результат:
    Код (Text):
    1. "[home]Строка1
    2. [end]" => "10", "[home]Строка2
    3. [end]" => "0", "[home]Строка3
    4. [end]" => "0", "[home]Строка4
    5. [end]" => "8", "[home]Строка5
    6. [end]" => "0", "[home]Строка6
    7. [end]" => "0", "[home]Строка7
    8. [end]" => "7", "[home]Строка8[end]" => "4"
    что тут можно придумать для сортировки по => "..." ?[/code]
     
  13. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  14. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    PHP:
    1. <?
    2. $arr = array("[home]Строка1
    3. [end]"=>10, "[home]Строка2
    4. [end]"=>0, "[home]Строка3
    5. [end]"=>0, "[home]Строка4
    6. [end]"=>8, "[home]Строка5
    7. [end]"=>0, "[home]Строка6
    8. [end]"=>0, "[home]Строка7
    9. [end]"=>7, "[home]Строка8[end]"=>4);
    10.  
    11. arsort($arr);
    12. foreach($arr as $v=>$k) echo "$v=>$k ";
    13. ?>
    Как теперь всё это в переменную обратить?
     
  15. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    PHP:
    1.  <?
    2. $content = '"[home]Строка1
    3. [end]"=>10, "[home]Строка2
    4. [end]"=>0, "[home]Строка3
    5. [end]"=>0, "[home]Строка4
    6. [end]"=>8, "[home]Строка5
    7. [end]"=>0, "[home]Строка6
    8. [end]"=>0, "[home]Строка7
    9. [end]"=>7, "[home]Строка8[end]"=>4',
    10.  
    11.  $arr = array($content);
    12.  
    13.  arsort($arr);
    14.  foreach($arr as $v=>$k) echo "$v=>$k ";
    15.  ?>
    И что-то типа такого $arr = array($content); как можно сделать?
    Этот код не работает.
     
  16. -Vladimir-

    -Vladimir- Активный пользователь

    С нами с:
    20 сен 2009
    Сообщения:
    139
    Симпатии:
    0
    Можно ли как-то по-другому отсортировать данные в переменной $content ?
     
  17. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    -Vladimir-
    можно все, но ничего нового в сравнении с вышесказанным я добавить не могу.