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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка ключей масива по алфовиту с учетом цифр 
V
    Опции темы
chiffa
Дата 14.3.2011, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день. Есть массив в 

a1
a3
a2
a10
b2
b1
b11

при использовании ksort результат получается Что по сути есть логичным, с точки зрения программы...

a1
a10
a2
a3
b1
b11
b2

А как получить "правильный" отсортированный список?... то есть

a1
a2
a3
a10
b1
b2
b11

Заранее спасибо за помощь!
PM MAIL   Вверх
ksnk
Дата 14.3.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Код

$ar=array('a1',
'a3',
'a2',
'a10',
'b2',
'b1',
'b11');

function cmp($a,$b){
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

function sortarray($a, $b){
  if(preg_match('/(\D*)(\d*)/',$a,$ma))

     if(preg_match('/(\D*)(\d*)/',$b,$mb)) {
        $res=cmp($ma[1],$mb[1]);
        if($res==0)
            return cmp($ma[2],$mb[2]);
        else 
            return $res;
  }
  return cmp($a,$b);
}


usort($ar,sortarray);
print_r($ar);

как-то так.

Добавлено через 28 секунд
Хотя, возможно, есть более натуральные сортировки


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Shumomer
Дата 14.3.2011, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



natsort($ar); вообще-то smile
PM   Вверх
SneG0K
Дата 14.3.2011, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

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



Эммм, вообще-то обычный sort подойдет
Код

$arr = array('m1', 'm3', 'm2', 'm5', 'm1', 'm1');
sort($arr);
var_dump($arr);


Это сообщение отредактировал(а) SneG0K - 14.3.2011, 23:14
PM WWW Skype   Вверх
Shumomer
Дата 15.3.2011, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SneG0K, а ты добавь в массив элемент 'm10' (см. условия ТС) и посмотри куда он встанет при обычном sort и куда при natsort
PM   Вверх
chiffa
Дата 15.3.2011, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Shumomer, Пасиба! natsort уже близко но все равно как то не так...

[chiffa_0] => 
    [chiffa_1] => 
    [chiffa_2] => 
    [chiffa_3] => 
    [chiffa_4] => 
    [chiffa_6] => 
    [chiffa_9] => 
    [chiffa_27] => 
    [chiffa_28] => 
    [chiffa_29] => 
.....

[chiffa_41] => 
    [chiffa_42] => 
    [chiffa_43] => 
    [chiffa_5] => 
    [chiffa_7] => 
    [chiffa_8] => 
    [chiffa_10] => 

ну и т.д....

PM MAIL   Вверх
Shumomer
Дата 15.3.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так вам по значениям или по ключам сортировка-то нужна?
PM   Вверх
chiffa
Дата 15.3.2011, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



по ключам...
PM MAIL   Вверх
ksnk
Дата 15.3.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(chiffa @  15.3.2011,  16:23 Найти цитируемый пост)
по ключам... 

А мой способ чем не подошел?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
chiffa
Дата 15.3.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У тебя почему то выдает...

Notice: Use of undefined constant sortarray - assumed 'sortarray' in /var/www/mess/modules/mes_do.php on line 341


и меняет индекс...

 [0] => 
    [1] => 
    [2] => 
    [3] => 
    [4] => 
PM MAIL   Вверх
ksnk
Дата 15.3.2011, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(chiffa @  15.3.2011,  17:41 Найти цитируемый пост)
on line 341

 smile в моем тексте не так много строк.
А если одним файлом мой текст оформить - тоже ругательство будет? У меня - работает
Цитата

Array ( [0] => a1 [1] => a2 [2] => a3 [3] => a10 [4] => b1 [5] => b2 [6] => b11 ) 


а версия php какая? 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
chiffa
Дата 16.3.2011, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ksnk, так разве оно у тебя по ключам сортирует?....

Добавлено через 1 минуту и 48 секунд
пхп 5

Добавлено через 14 минут и 6 секунд
Проблема решена. Может кому то будет полезным. сделал так:

Код

$ar=array('chiffa_0' => '1',
    'chiffa_1' => '2',
    'chiffa_2' => '3',
    'chiffa_4' => '4',
    'chiffa_40' => '5',
    'chiffa_21' => '6',
    'chiffa_93' => '7',
    'chiffa_71' => '8',
    'chiffa_86' => '9',
    'chiffa_29' => '10' );


foreach ($ar as $key=>$value)
{
$arr_for_sort []=$key;
}

natsort ($arr_for_sort);
foreach ($arr_for_sort as $sor_key)
{
$new_arr [$sor_key]=$ar [$sor_key];
}
print_r($new_arr);

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

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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