Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сотировка в многомерном массиве

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
geni_student
Отправлено: 30 Ноября, 2013 - 20:17:35
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Доброго времени суток, уважаемые форумчане! Есть вот такой многомерный массив (здесь все в перемешку- и строки, и числа целые, и числа дробные):

$arr = array(
'C' => array (10.33,'ka'=> array ('e','d','mmm'),'fff','nnn'),
'A' => array (15,45 => array (14.5,75,21.9),17),
'L',
'N',
'TGHI' => array('bbb','aaa',14,37.3),
18,
1,
59);

Мне нужно для освоения навыков:
1) Отсортировать все элементы этого массива на всех уровнях по возрастанию.
2)Удалить из массива все дроби.

Как это лучше сделать?! Помогите, пожалуйста! Или хотя бы посоветуйте как получить доступ к массивам внутри многомерного массива. По возможности комментируйте свой код.
 
 Top
dXdYdZ
Отправлено: 30 Ноября, 2013 - 20:22:34
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




Используйте рекурсивную функцию и foreach.
 
 Top
geni_student
Отправлено: 30 Ноября, 2013 - 21:30:31
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




[Используйте рекурсивную функцию и foreach.]

Хорошо. Но как это применить к данному случаю? Нужна помощь!

(Отредактировано автором: 30 Ноября, 2013 - 21:34:07)

 
 Top
AmsTaFF
Отправлено: 03 Декабря, 2013 - 11:21:04
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




плохой пример тут написал, удалю ка я его...

(Отредактировано автором: 03 Декабря, 2013 - 15:03:50)

 
 Top
Hapson
Отправлено: 03 Декабря, 2013 - 14:10:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


AmsTaFF
А вы пробовали запускать это?
(Добавление)
geni_student
Не страдай фигней, а лучше почитай
http://www.php.net/manual/ru/array.sorting.php
http://php.net/manual/ru/languag...l-structures.php


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
AmsTaFF
Отправлено: 03 Декабря, 2013 - 15:03:21
Post Id


Гость


Покинул форум
Сообщений всего: 84
Дата рег-ции: Июнь 2013  
Откуда: Россия, Москва


Помог: 1 раз(а)




Hapson пишет:
AmsTaFF
А вы пробовали запускать это?
(Добавление)
geni_student
Не страдай фигней, а лучше почитай
http://www.php.net/manual/ru/array.sorting.php
http://php.net/manual/ru/language.control-structures.php

ойй.... что это я ... прошу прощения, неправильно Улыбка да и вообще удалю ка я...
 
 Top
dXdYdZ
Отправлено: 03 Декабря, 2013 - 15:40:38
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




Вот скрипт:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $arr = array(
  4. 'C' => array (10.33,'ka'=> array ('e','d','mmm'),'fff','nnn'),
  5. 'A' => array (15,45 => array (14.5,75,21.9),17),
  6. 'L',
  7. 'N',
  8. 'TGHI' => array('bbb','aaa',14,37.3),
  9. 18,
  10. 1,
  11. 59);
  12.  
  13. function sort_array(&$arr)
  14.     {
  15.     asort($arr);
  16.     foreach($arr as $key=>$value)
  17.         {
  18.         //Сортируем вложенный массив
  19.         if(is_array($value))
  20.             sort_array($arr[$key]);
  21.         //Удаляем дроби в числах
  22.         elseif(is_numeric($value))
  23.             $arr[$key]=(integer)$value;
  24.         }
  25.     }
  26.  
  27. var_dump($arr);
  28. sort_array($arr);
  29. echo("<h2>Обработанный массив:</h2>");
  30. var_dump($arr);
  31.  
  32. ?>

Обработанный этой функцией массив выглядит так:
PHP:
скопировать код в буфер обмена
  1. array(8) {
  2.   [0]=>
  3.   string(1) "L"
  4.   [1]=>
  5.   string(1) "N"
  6.   [3]=>
  7.   int(1)
  8.   [2]=>
  9.   int(18)
  10.   [4]=>
  11.   int(59)
  12.   ["A"]=>
  13.   array(3) {
  14.     [0]=>
  15.     int(15)
  16.     [46]=>
  17.     int(17)
  18.     [45]=>
  19.     array(3) {
  20.       [0]=>
  21.       int(14)
  22.       [2]=>
  23.       int(21)
  24.       [1]=>
  25.       int(75)
  26.     }
  27.   }
  28.   ["TGHI"]=>
  29.   array(4) {
  30.     [1]=>
  31.     string(3) "aaa"
  32.     [0]=>
  33.     string(3) "bbb"
  34.     [2]=>
  35.     int(14)
  36.     [3]=>
  37.     int(37)
  38.   }
  39.   ["C"]=>
  40.   array(4) {
  41.     [1]=>
  42.     string(3) "fff"
  43.     [2]=>
  44.     string(3) "nnn"
  45.     [0]=>
  46.     int(10)
  47.     ["ka"]=>
  48.     array(3) {
  49.       [1]=>
  50.       string(1) "d"
  51.       [0]=>
  52.       string(1) "e"
  53.       [2]=>
  54.       string(3) "mmm"
  55.     }
  56.   }
  57. }
  58.  
 
 Top
geni_student
Отправлено: 03 Декабря, 2013 - 16:33:20
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




dXdYdZ, ты не знаешь почему ["C"] в полученном массиве идет после ["TGHI"]???

(Отредактировано автором: 03 Декабря, 2013 - 16:37:18)

 
 Top
dXdYdZ
Отправлено: 03 Декабря, 2013 - 17:35:57
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




geni_student пишет:
dXdYdZ, ты не знаешь почему ["C"] в полученном массиве идет после ["TGHI"]???

И ["C"] и ["TGHI"] - это ключи массива, а не значения. А функция asort сортирует массивы по значениям, а не по ключам. Значения же в данном случае - массивы. Вот функция asort и посчитала, что массив, на который указывает ключ "C", больше массива, на который указывает ключ "TGHI". Поэтому и так отсортировала.
 
 Top
geni_student
Отправлено: 03 Декабря, 2013 - 17:55:08
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




dXdYdZ пишет:
geni_student пишет:
dXdYdZ, ты не знаешь почему ["C"] в полученном массиве идет после ["TGHI"]???

И ["C"] и ["TGHI"] - это ключи массива, а не значения. А функция asort сортирует массивы по значениям, а не по ключам. Значения же в данном случае - массивы. Вот функция asort и посчитала, что массив, на который указывает ключ "C", больше массива, на который указывает ключ "TGHI". Поэтому и так отсортировала.


Скажи, а как можно отсортировать ключи по порядку, но в то же время чтобы значения тоже шли по порядку и сохранялась связь между ними.
 
 Top
dXdYdZ
Отправлено: 03 Декабря, 2013 - 18:00:14
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




geni_student пишет:
Скажи, а как можно отсортировать ключи по порядку, но в то же время чтобы значения тоже шли по порядку и сохранялась связь между ними.

Если отсортировать ключи по порядку, то значения будут уже не по порядку. И наоборот, если отсортировать по порядку значения, то ключи будут не по порядку (это при условии сохранения связи)
 
 Top
geni_student
Отправлено: 03 Декабря, 2013 - 18:20:31
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




dXdYdZ пишет:
geni_student пишет:
Скажи, а как можно отсортировать ключи по порядку, но в то же время чтобы значения тоже шли по порядку и сохранялась связь между ними.

Если отсортировать ключи по порядку, то значения будут уже не по порядку. И наоборот, если отсортировать по порядку значения, то ключи будут не по порядку (это при условии сохранения связи)


А если сначала отсортировать по порядку значения одной функцией, а потом отсортировать уже ключи другой функцией, то по идее должно получится!? Надо попробовать.

(Отредактировано автором: 03 Декабря, 2013 - 18:21:45)

 
 Top
dXdYdZ
Отправлено: 03 Декабря, 2013 - 18:32:37
Post Id


Посетитель


Покинул форум
Сообщений всего: 271
Дата рег-ции: Нояб. 2013  


Помог: 11 раз(а)




Не получится. При сохранении связи второе действие отменит сортировку первым действием.

(Отредактировано автором: 03 Декабря, 2013 - 18:32:55)

 
 Top
geni_student
Отправлено: 03 Декабря, 2013 - 18:36:24
Post Id


Новичок


Покинул форум
Сообщений всего: 19
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




dXdYdZ пишет:
Не получится. При сохранении связи второе действие отменит сортировку первым действием.


Большое спасибо. Теперь в голове какой-то порядок наметился с этой сортировкой Подмигивание
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB