38 / 38 / 11
Регистрация: 27.09.2014
Сообщений: 475
1

Отсортировать ассоциативный массив

06.04.2016, 19:04. Показов 1310. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то не могу понять, как отсортировать массив такого типа:
PHP
1
$M = array( "key1"=>array(10,20,30), "key2"=>array(1,2,3), "key3"=>array(12,22,32) );
Если не обращать внимания на ключи, то в итоге имеем такую "табличку":
10,20,30
1,2,3
12,22,32
Вот нужно это дело отсортировать (всегда числа) по выбранному столбцу. Естественно ключи тоже должны переместиться...
Т.е. если сортировать по первому столбцу, то должно получиться:
PHP
1
$M = array( "key2"=>array(1,2,3), "key1"=>array(10,20,30), "key3"=>array(12,22,32) );
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2016, 19:04
Ответы с готовыми решениями:

Как отсортировать ассоциативный массив?
Есть массив многоуровневый ассоциативный массив типа вот такого (строчек будет больше): Array...

Нужно преобразовать массив ассоциативных массивов в единый ассоциативный массив, а у меня никак не получается
Как преобразовать массив на скрине так, чтобы получился массив: => FB => FREE При этом...

Ассоциативный массив
Здравствуйте! Скажите, пожалуйста, откуда здесь единицы и как их убрать?

Ассоциативный массив
Создайте ассоциативный массив, содержащий информацию о пользователях (ФИО, возраст, количество...

11
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,209
06.04.2016, 19:16 2
Лучший ответ Сообщение было отмечено edward_freedom как решение

Решение

встроенной ф-ии нет, потому что такое возникает... никогда
если массив разбирается через foreach, то первым (можно даже ДО foreach) вытащить нужный ключ и удалить, либо игнорировать в дальнейшем
а если не foreach, то зачем вообще это всё? вызывайте по ключу, как вам надо.

ф-ии для работы с массивами:
array_flip — Поменять местами значения массива
array_reverse — Возвращает массив с элементами в обратном порядке
array_splice — Удалить последовательность элементов массива и заменить её другой последовательностью
asort — Отсортировать массив, сохраняя ключи
krsort — Отсортировать массив по ключам в обратном порядке
ksort — Отсортировать массив по ключам
1
Эксперт PHP
3105 / 2590 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
06.04.2016, 19:25 3
Vovka,
PHP
1
2
3
4
usort($M, function($a, $b)
{
    return $a[0] === $b[0] ? 0 : ($a[0] < $b[0] ? -1 : 1);
});
1
38 / 38 / 11
Регистрация: 27.09.2014
Сообщений: 475
06.04.2016, 19:29  [ТС] 4
Цитата Сообщение от полудух Посмотреть сообщение
потому что такое возникает... никогда
Попробую пример привести.
Допустим есть такой массив:
Имя сотрудника, кол-во сделано деталей, кол-во брака, процент.
Допустим, нужно отсортировать по кол-ву брака.

Добавлено через 3 минуты
Kerry_Jr, а как тогда для второго "столбца" сортировать?
0
Hello Kitty
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
06.04.2016, 19:35 5
Цитата Сообщение от Vovka Посмотреть сообщение
Что-то не могу понять, как отсортировать массив такого типа:
PHPВыделить код
1
$M = array( "key1"=>array(10,20,30), "key2"=>array(1,2,3), "key3"=>array(12,22,32) );
Если не обращать внимания на ключи, то в итоге имеем такую "табличку":
10,20,30
1,2,3
12,22,32
Вот нужно это дело отсортировать (всегда числа) по выбранному столбцу. Естественно ключи тоже должны переместиться...
Т.е. если сортировать по первому столбцу, то должно получиться:
PHPВыделить код
1
$M = array( "key2"=>array(1,2,3), "key1"=>array(10,20,30), "key3"=>array(12,22,32) );

PHP
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
<?php
 
$M = array( "key1"=>array(10,20,30), "key2"=>array(1,2,3), "key3"=>array(12,22,32) );
 
uasort($M , function($l,$r) {
    $rtype = 1;
    $kList = [0,1,2];
 
    $c = 0;
    foreach($kList as $key) {
        if ( $l[$key] <= $r[$key] ) { break; }
        $c++;
    }
    if ( $c === count($kList) ) { return $rtype; }
    
    $c = 0;
    foreach($kList as $key) {
        if ( $l[$key] >= $r[$key] ) { break; }
        $c++;
    }
    if ( $c === count($kList) ) { return -$rtype; }
    
    
    return 0;
});
 
print_r( $M );
Добавлено через 28 секунд
http://sandbox.onlinephpfuncti... 548c9857a5

Добавлено через 31 секунду
Цитата Сообщение от полудух Посмотреть сообщение
ф-ии для работы с массивами:
array_flip — Поменять местами значения массива
array_reverse — Возвращает массив с элементами в обратном порядке
array_splice — Удалить последовательность элементов массива и заменить её другой последовательностью
asort — Отсортировать массив, сохраняя ключи
krsort — Отсортировать массив по ключам в обратном порядке
ksort — Отсортировать массив по ключам
как эти функции помогут в сортировки?
0
38 / 38 / 11
Регистрация: 27.09.2014
Сообщений: 475
06.04.2016, 19:37  [ТС] 6
ДОШЛО!!! Спасибо всем!
А то я уже хотел на массивы разбить и использовать array_multisort()
В формирование массива я влезть не могу - "не я это придумал"
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,209
06.04.2016, 19:38 7
вот рабочий вариант (скомбинирован с вар-том Kerry_Jr)
сортировка по 'count':
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$a = array (
    array ( 'id' => 1, 'name' => 'Категория1', 'count' => 36 ),
    array ( 'id' => 2, 'name' => 'Категория2', 'count' => 1 ) ,
    array ( 'id' => 3, 'name' => 'Категория3', 'count' => 9 ) ,
    array ( 'id' => 4, 'name' => 'Категория4', 'count' => 5 ) ,
    array ( 'id' => 5, 'name' => 'Категория5', 'count' => 0 ) ,
    array ( 'id' => 6, 'name' => 'Категория6', 'count' => 7 ),
);
 
usort($a,function($l,$r) {return $l['count'] === $r['count'] ? 0 : ($l['count'] < $r['count'] ? -1 : 1);});
 
print_r($a);
Цитата Сообщение от WhiteMind Посмотреть сообщение
как эти функции помогут в сортировки?
в этой никак, я их как альтернативу привёл
часто новички сами не знают, чего хотят )
0
Hello Kitty
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
06.04.2016, 19:40 8
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Vovka,
PHP
1
2
3
4
usort($M, function($a, $b)
{
    return $a[0] === $b[0] ? 0 : ($a[0] < $b[0] ? -1 : 1);
});
Цитата Сообщение от полудух Посмотреть сообщение
вот рабочий вариант (скомбинирован с вар-том Kerry_Jr)
сортировка по 'count':
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$a = array (
array ( 'id' => 1, 'name' => 'Категория1', 'count' => 36 ),
array ( 'id' => 2, 'name' => 'Категория2', 'count' => 1 ) ,
array ( 'id' => 3, 'name' => 'Категория3', 'count' => 9 ) ,
array ( 'id' => 4, 'name' => 'Категория4', 'count' => 5 ) ,
array ( 'id' => 5, 'name' => 'Категория5', 'count' => 0 ) ,
array ( 'id' => 6, 'name' => 'Категория6', 'count' => 7 ),
);
usort($a,function($l,$r)
{
    return $l['count'] === $r['count'] ? 0 : ($l['count'] < $r['count'] ? -1 : 1);
});
print_r($a);
все эти варианты не рабочии

Добавлено через 25 секунд
а вот мой вариант рабочий
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,209
06.04.2016, 19:41 9
Цитата Сообщение от WhiteMind Посмотреть сообщение
все эти варианты не рабочии
шта? отсортировано же по 'count'
PHP
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Array
(
    [0] => Array
        (
            [id] => 5
            [name] => Категория5
            [count] => 0
        )
 
    [1] => Array
        (
            [id] => 2
            [name] => Категория2
            [count] => 1
        )
 
    [2] => Array
        (
            [id] => 4
            [name] => Категория4
            [count] => 5
        )
 
    [3] => Array
        (
            [id] => 6
            [name] => Категория6
            [count] => 7
        )
 
    [4] => Array
        (
            [id] => 3
            [name] => Категория3
            [count] => 9
        )
 
    [5] => Array
        (
            [id] => 1
            [name] => Категория1
            [count] => 36
        )
 
)
0
Hello Kitty
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
06.04.2016, 19:43 10
Цитата Сообщение от полудух Посмотреть сообщение
шта?
)не .
сами догадайтесь

Добавлено через 1 минуту
Цитата Сообщение от полудух Посмотреть сообщение
шта?
хотя конкретно на этом примере
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$a = array (
    array ( 'id' => 1, 'name' => 'Категория1', 'count' => 36 ),
    array ( 'id' => 2, 'name' => 'Категория2', 'count' => 1 ) ,
    array ( 'id' => 3, 'name' => 'Категория3', 'count' => 9 ) ,
    array ( 'id' => 4, 'name' => 'Категория4', 'count' => 5 ) ,
    array ( 'id' => 5, 'name' => 'Категория5', 'count' => 0 ) ,
    array ( 'id' => 6, 'name' => 'Категория6', 'count' => 7 ),
);
 
usort($a,function($l,$r) {return $l['count'] === $r['count'] ? 0 : ($l['count'] < $r['count'] ? -1 : 1);});
 
print_r($a);
работать будет.

я про
Цитата Сообщение от Vovka Посмотреть сообщение
Что-то не могу понять, как отсортировать массив такого типа:
PHPВыделить код
1
$M = array( "key1"=>array(10,20,30), "key2"=>array(1,2,3), "key3"=>array(12,22,32) );
Если не обращать внимания на ключи, то в итоге имеем такую "табличку":
10,20,30
1,2,3
12,22,32
Вот нужно это дело отсортировать (всегда числа) по выбранному столбцу. Естественно ключи тоже должны переместиться...
Т.е. если сортировать по первому столбцу, то должно получиться:
PHPВыделить код
1
$M = array( "key2"=>array(1,2,3), "key1"=>array(10,20,30), "key3"=>array(12,22,32) );
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,209
06.04.2016, 19:46 11
а это у вас инфа устарела
вот свежачок-с:
Цитата Сообщение от Vovka Посмотреть сообщение
Попробую пример привести.
Допустим есть такой массив:
Имя сотрудника, кол-во сделано деталей, кол-во брака, процент.
Допустим, нужно отсортировать по кол-ву брака.
Добавлено через 3 минуты
Kerry_Jr, а как тогда для второго "столбца" сортировать?
в моём примере он всегда может 'count' на [2] заменить
0
Hello Kitty
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
06.04.2016, 19:50 12
Цитата Сообщение от полудух Посмотреть сообщение
а это у вас инфа устарела
вот свежачок-с:
Сообщение от Vovka
Попробую пример привести.
Допустим есть такой массив:
Имя сотрудника, кол-во сделано деталей, кол-во брака, процент.
Допустим, нужно отсортировать по кол-ву брака.
Добавлено через 3 минуты
Kerry_Jr, а как тогда для второго "столбца" сортировать?
в моём примере он всегда может 'count' на [2] заменить
ясно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2016, 19:50
Помогаю со студенческими работами здесь

Ассоциативный массив
Всем привет есть ассоциативный массив $monthes =...

Ассоциативный массив
Буду очень благодарин за помощь. Молодой в этом и глупый)) 1. Создайте ассоциативный массив...

Ассоциативный массив
прошу помощи у меня возник вопрос про Ассоциативный массив, каким образом можно создать ...

Ассоциативный массив ( многомерный )
Ребята есть такой код class Tweet { private $name,$family,$age,$city,$job; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru