Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123

Сортировка массива по 8-му значению

29.05.2016, 10:32. Показов 1074. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не успел решить одну проблему, как кричу о помощи другой.
Снова всем доброго времени суток!

И так. Есть таблица в файле

1|-|-|-|-|-|-|0.466|-|-
2|-|-|-|-|-|-|0.608|-|-
3|-|-|-|-|-|-|0.465|-|-
4|-|-|-|-|-|-|0.605|-|-

Первое значение нумерация
Нужно отсортировать массив по 8-му значению.

Делаю так:

PHP
1
2
3
4
5
6
7
$data = array();
foreach($file as $line) {
 $e = explode("|", trim($line));
 $data[$e[7]] =  array('number' => $e[0], '-' => $e[1], '-' => $e[2], '-' => $e[3], '-' => $e[4], '-' => $e[5], '-' => $e[6], 'mynumber' => $e[7], '-' => $e[8], '-' => $e[9], );
}
 
arsort($data);
и вывод

PHP
1
2
3
foreach ($data as $key => $val) {
 echo $key;
}
Но выводится такой список:
0.605
0.465
0.608
0.466

То бишь 3 строка должна быть на втором месте, т.к. значение больше, но они почему то не там. Обратите внимание на нумерацию строк в отсортированном списке. Они идут на убывание. 4, 3, 2, 1, а должны сортироваться не номера, а другое значение.
Заранее благодарен за помощь, т.к. это очень важно.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.05.2016, 10:32
Ответы с готовыми решениями:

Сортировка массива по значению
Здравствуйте...есть массив $massiv = ('city' => array('Киев' => '3','Львов' => '1'),'population' => array('foo' => '100','bar' =>...

Убывающая сортировка ассоциативного массива по значению
Добрый день! Как сделать сортировку массива, где ключ и значение. $answers = array("name" => $q,"total" =>...

Сортировка ассоциативного массива по значению
Добрый день! Опять возник банальный вопрос, на который мне не дали ответа поисковые системы. Есть ассоциативный массив, ключами являются...

14
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 10:44
Лучший ответ Сообщение было отмечено maksam07 как решение

Решение

maksam07, http://php.net/manual/ru/function.uasort.php
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<pre>
<?php
 
function cmp($a, $b)
{
    $a = $a['mynumber'];
    $b = $b['mynumber'];
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
 
$s = <<<S
1|-|-|-|-|-|-|0.466|-|-
2|-|-|-|-|-|-|0.608|-|-
3|-|-|-|-|-|-|0.465|-|-
4|-|-|-|-|-|-|0.605|-|-
S;
$file = explode("\r\n", $s);
foreach($file as $line) {
 $e = explode("|", trim($line));
 $data[$e[7]] =  array('number' => $e[0], '-' => $e[1], '-' => $e[2], '-' => $e[3], '-' => $e[4], '-' => $e[5], '-' => $e[6], 'mynumber' => $e[7], '-' => $e[8], '-' => $e[9], );
}
 
uasort($data, 'cmp');
 
foreach ($data as $key => $val) {
 echo $key.PHP_EOL;
}
Code
1
2
3
4
0.465
0.466
0.605
0.608
1
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.05.2016, 10:48  [ТС]
pav1uxa, спасибо, но ошибка была всего то в функции сортировки. Я сортировал по значению, а нужно было по ключу, а то есть:
PHP
1
krsort($data);
Но Ваше дополнение тоже возьму на заметку, пригодится!
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 11:28
Цитата Сообщение от maksam07 Посмотреть сообщение
Но Ваше дополнение тоже возьму на заметку, пригодится!
Да у Вас массив вообще какой то страшный получается. У Вас эти цифры и в ключах и в 7 элементе подмассива, зачем тогда 2 раза их хранить
0
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.05.2016, 11:33  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
Да у Вас массив вообще какой то страшный получается. У Вас эти цифры и в ключах и в 7 элементе подмассива, зачем тогда 2 раза их хранить
для удобства же. Знаю, что можно выводить переменной $key, но $val['mynumber'] выглядит красивее

Подскажите, как лучше оформить все это, если не сложно. Ну, например "'mynumber' => $e[7]," я могу убрать и это должно облегчить таблицу. Есть еще какие-то рекомендации? Просто не хочу, что бы сайт был нагружен при больших списках
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 11:36
Цитата Сообщение от maksam07 Посмотреть сообщение
Есть еще какие-то рекомендации?
Ну я не знаю что там за массив у Вас, откуда он берется, как формируется, какие там еще значения помимо этих двух, для чего он нужен и так далее... Но в общем случае думаю и так сойдет.

Единственное что, получается что если у Вас будут строки с одинаковым числом, например 2 строки с 0.466, то они станут одной... Я не знаю нужно Вам чтобы было уникально или как...
0
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.05.2016, 11:45  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
если у Вас будут строки с одинаковым числом, например 2 строки с 0.466, то они станут одной
А вот такого, кстати, не нужно. Как быть? Использовать Ваш вариант, без использования ключа?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 12:18
Цитата Сообщение от maksam07 Посмотреть сообщение
Использовать Ваш вариант, без использования ключа?
Ну да. Соответственно вместо
PHP
1
$data[$e[7]] =
писать
PHP
1
$data[] =
при формировании массива.

А если изначальная очередность не интересует, то вместо uasort использовать usort.
0
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.05.2016, 12:25  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
использовать usort
А нет случайно функции, которая сортирует массив по значению внутри массива? Не знаю, на сколько правильно объяснил это

Ну, что-то типа: сортировка( $data['mynumber'], SORT_DESC )

PS Что бы не писать лишние строки кода, а уместить все в пару символов
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 12:58
Цитата Сообщение от maksam07 Посмотреть сообщение
А нет случайно функции, которая сортирует массив по значению внутри массива? Не знаю, на сколько правильно объяснил это
Ну только так как я написал.
Цитата Сообщение от maksam07 Посмотреть сообщение
Ну, что-то типа: сортировка( $data['mynumber'], SORT_DESC )
Нет.
Цитата Сообщение от maksam07 Посмотреть сообщение
PS Что бы не писать лишние строки кода, а уместить все в пару символов
Код, конечно, можно уменьшить, но читабельности будет меньше
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<pre>
<?php
 
$s = <<<S
1|-|-|-|-|-|-|0.466|-|-
2|-|-|-|-|-|-|0.608|-|-
3|-|-|-|-|-|-|0.465|-|-
4|-|-|-|-|-|-|0.605|-|-
S;
$file = explode("\r\n", $s);
foreach($file as $line) {
 $e = explode("|", trim($line));
 $data[$e[7]] =  array('number' => $e[0], '-' => $e[1], '-' => $e[2], '-' => $e[3], '-' => $e[4], '-' => $e[5], '-' => $e[6], 'mynumber' => $e[7], '-' => $e[8], '-' => $e[9], );
}
 
uasort($data, function ($a, $b)  { return ($a['mynumber'] < $b['mynumber']) ? -1 : 1;} );
 
foreach ($data as $key => $val) {
 echo $key.PHP_EOL;
}
0
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.05.2016, 13:02  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
Код, конечно, можно уменьшить, но читабельности будет меньше
Почитал много разного в интернете по типу мускуль против файлов и понял, что мне наверное нужно использовать мускуль, т.к. будет очень много информации и она должна будет часто редактироваться. Говорят что файлы могут не справляться, когда их будет редактировать сразу несколько человек. Так что, придется учить теперь mysql
Я знаю, что он удобнее в плане вывода/записи, но мне с файлами было удобнее в плане "зашел и посмотрел че там"
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 13:05
Цитата Сообщение от maksam07 Посмотреть сообщение
Почитал много разного в интернете по типу мускуль против файлов и понял, что мне наверное нужно использовать мускуль, т.к. будет очень много информации и она должна будет часто редактироваться. Говорят что файлы могут не справляться, когда их будет редактировать сразу несколько человек. Так что, придется учить теперь mysql
Естественно.
Цитата Сообщение от maksam07 Посмотреть сообщение
Я знаю, что он удобнее в плане вывода/записи, но мне с файлами было удобнее в плане "зашел и посмотрел че там"
Ну не скажите. Существуют MySQL-менеджеры. Ими можно быстро и удобно посмотреть что нужно. Удобней даже чем по папкам\файлам лазить...
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
29.05.2016, 13:06
Цитата Сообщение от maksam07 Посмотреть сообщение
придется учить теперь mysql
Да конечно придётся.
Без базы, никуда.
0
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.05.2016, 13:08  [ТС]
Цитата Сообщение от pav1uxa Посмотреть сообщение
Естественно.
Случайно не подскажешь базовые функции мускуля?

Ну, типа, подключение в базе, вывод нескольких первых строк отсортированной базы, изменение данных в базе, ну это так, если не сложно. А то даже не знаю чем продолжить, как сделаю подключение в базе данных.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2016, 13:19
Цитата Сообщение от maksam07 Посмотреть сообщение
Случайно не подскажешь базовые функции мускуля?
http://www.w3schools.com/sql/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2016, 13:19
Помогаю со студенческими работами здесь

Сортировка одномерного массива по абсолютному значению
Всем привет. Нужно отсортировать одномерный массив по абсолютному значению, т,е. есть массив из 7 чисел , на выходе должно...

Сортировка списка по среднему значению массива
Есть класс: public class Student { public byte Marks { get; set; } public string FIO { get; set; } ...

Сортировка символьного массива по заданному значению
Доброго времени суток. Требуется ваша помощь. Есть массив символов, который требуется отсортировать этот массив по заданному значению. ...

Сортировка массива записей по значению поля
Здравствуйте. Как понимаю данный код я: функция сравнения преобразует (void * a) в (Struct *), а затем получает значение var2. #include...

Сортировка массива "не совсем" по алфавиту по значению
Здравствуйте. Необходимо отсортировать массив &quot;не совсем&quot; по алфавиту, по значению. Имеем такой массив (массив большой, тут лишь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru