Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
всем привет!!! есть массив Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. надо уменьшить количество элементов прибавив единицы (db) к уже имеющимся т.е. должно получится вот так Код: 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. уже весь мозг сломал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2014, 15:38 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, Зачем же делать такие "страшные" данные, чтобы потом сидеть и с ними мучиться. Откуда вы их получаете, может можно до получения массива привести все в человеческий вид? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 12:47 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
нельзя, т.к. их формирует JS который трогать нельзя (((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 17:18 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. может такой вариант устроит ? (не проверял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 17:23 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
artas, в Иф там $v1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 17:28 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
artaswoojin, Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. может такой вариант устроит ? (не проверял) все прибавилось к текстовому элементу ID и не сохранился элемент DB ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2014, 22:32 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
в общем это работает Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 01:26 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, както сложно. так не пойдет? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 14:01 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
r uтак не пойдет? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. работает не верно (хотя мой то же), и переставляет элементы непонятным образом массив для тестов (на входе) Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. контрольный массив (на выходе) Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 15:36 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, что-то всё очень сложно )) Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Я так понимаю ключи массива не значимы... значимы только значения id. (просто иначе я не понимаю почему выбраны именно t1, t2, t4, а не t7 например) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 15:40 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
немного ошибся, контрольный массив должен быть таким Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 15:53 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
Програмёрwoojin, Я так понимаю ключи массива не значимы... значимы только значения id. да, извиняй что сразу об этом как то забыл упомянуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 15:57 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
переделал свой вариант, там обнаружился бесконечный цикл а вот в таком варианте, всё нормально Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 16:40 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, А зачем такая сложность кода? Чем не подошли предложенные варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 19:10 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
Програмёр, я же тут( 15789883 ) показал пример выходного массива и при использовании приведённых примеров кода, такой варианта не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 21:29 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojinПрограмёр, я же тут( 15789883 ) показал пример выходного массива и при использовании приведённых примеров кода, такой варианта не получается Прям не знаю что ответить :) В общем дело Ваше... мы Вам посоветовали как надо... А Вы предоставили некий массив, принцип формирования которого не понятен (вот зачем двумерный массив, как определить что в каком элементе верхнего уровня должно лежать... и почему такие ключи и именно в таком порядке) и хотите что бы мы его повторили. Тут телепатов нету :) Если поясните принцип формирования выходного массива, и что в указанном примере значимое, а какими данными можно пренебречь (ну имеется ввиду например внешние ключи значения не имеют... или порядок значения не имеет... или ещё что), вот тогда Вам обязательно помогут... и при том внятным нормальным кодом... В Вашем варианте много непонятного: 1. Зачем в случае пустого массива удалять на него ссылку? что бы усложнить отлов ошибки, когда начнут сыпаться варнинги типа $array не является массивом? 2. $rst = FALSE; ... $rst в принципе не нужен.. участок кода отработается только 1 раз, так как при первом вызове $oiBludo[$oiKey] = $oiValue; количество элементов в данном массиве будет больше нуля... и данный блок повторно уже не будет выполняться... 3 косметического характера, но всё же... я бы матерился, достанься мне такой код :) (int) $cur[db] += (int) $first[db]; Зачем приведение типов? php - это php ... и лишние int тут только глаза мозолят... если операция "+=", то уже понятно что речь о числах идёт. А ещё интереснее момент, когда в коде появится константа db. Как Вы думаете, что произойдёт с кодом? в частности с этой строкой например? :) 4. Чёто не нашёл документации на функцию firstElemKey, но по названию и смыслу в коде предположу, что возвращает первый ключ ассоциативного массива. unset($oiValue[firstElemKey($oiValue, FALSE)]); очень удачно превращается в array_shift($oiValue) 5. $current += $oiValue; работаем с числами? а... нет $cur = &$current[key($current)]; ... оказывается это массивы... логика - если в языке есть возможность, это не значит что её надо пользовать там, где она внесёт хаос. $current = array_merge($current, $oiValue); ведь так сразу понятно что массивы? и не надо по коду бегать и искать что же мы делаем операцией + и какие там у нас типы... Итак... всё что я написал - не в обиду... Просто хотел показать сколько в Вашем коде лишнего и непонятного. Не знаю как остальным, а вот мне не совсем понятна суть всего кода в целом, при взгляде на него. А это уже плохо, если кроме Вас никто не может понять код... Это говорит о том, что спустя год и Вы его уже не поймёте :) P.S. Кстати... а я вот не понял как же Вы продвигаетесь внутри вложенных массивов? $cur = &$current[key($current)]; тут такое дело, что $current задан только один раз (вот какраз тот единственный раз когда выполнится участок кода в начале цикла), а потом $cur указывает чётко на выбранный элемент того самого массива (вложенного), при том никакие next не вызываются, а потому и key возвращает всё то же значение. нет? А с этого следует простой вопрос... А Ваш код вообще работает? или Вы его закинули в надежде получить готовый ответ, при том что код заведомо неверный? P.P.S. Почему в контрольном массиве по последним Вашим данным повторяются некоторые id элементов (например s_584 дважды... и s_84 тоже дважды)? А ещё интереснее... проверил Ваш код :) на выходе в $oiBludo совсеееем не то, что Вами описано было )) там s_101 повторился 2 раза (дальше не стал уже вникать... лень). Это не говоря о тех трёх десятках notice которые мне засветил интерпретатор (кстати, часть из них - это несуществующие элементы массивы с ключами 'id' и 'bd'. Вообще удивляюсь что код хоть что-то выводит ). Всё... окончательно убедился что написан говнокод :) Только теперь усомнился в добросовестности автора топика (похоже он ничего не делал и выдрал код непонятно откуда, где его суть была совсем другая... ну или просто накидал быстро что-нибудь, что бы сюда разместить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2014, 23:57 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
я же писал выше, что такие ключи формируются JS'ом ( 15785105 ) который трогать нельзя основной смысл в том чтобы получить, данные из вложенного массива (у которого есть в индексе буква "i") из поля id и сравнить со всеми остальными такими же полями, при совпадении прибавить к полю с индексом db столько сколько написано в поле db у найденного элемента 1. удалять чтобы выйти из цикла DO {} WHILE 2. тут скорее не нужен count($oiBludo) == 0 , т.к. участок кода отрабатывает не один раз, а несколько раз по количеству элементов массива, перемещение по массиву идёт от начала к концу и по мере внесения данных в $oiBludo в исходном массиве эти данные удаляются 3. во-первых: если таким += образом сложить текстовые величины (а они текстовые), то это получится что строка просто увеличится (отработает ни как 1+2=3, а как 1+2=12) во-вторых: db это не константа!!! (я в константах php такой не видел - покажите пожалуйста) и с этой строкой ни чего не происходит, т.к. она работает на УРА! тут получается что db это обозначение индекса 4. согласен, тут сплоховал, вот исходник: Код: php 1. 2. 3. 4. 5. 6. 7. 5. тут тоже согласен можно применить и array_merge , но в общем то не такой уж и большой код, чтобы в нём можно было запутаться P.S. ни как не продвигаюсь, я сравниваю только первые элементы, у которых в индексе есть буква "i", а остальные просто дописываю/переношу в получившийся массив, код рабочий, я выше выложил пример входящего массива (это не самое первое сообщение) и исходящего, если Вас не затруднит (чисто для себя), то можете взять мой код, входящий массив прогнать через него и получите исходящий P.P.S. по поводу одинаковых id , если внимательно посмотреть, то они находятся вообще в разных массивах (это если смотреть в любой из массивов, входящий/исходящий(конкретно тут из исходящего)) Код: php 1. 2. 3. 4. 5. 6. 7. интересно посмотреть где они выдаются (реально интересно, у меня просто даже при включенных ошибках нет ничего) согласен может быть и говнокод, написан мной лично, а выложен он сюда не для оскорблений , а для указания на ошибки и предложения своего варианта для решения поставленной задачи а поскольку ни кто ничего путного (того что могло бы создать контрольный массив на выходе), не предложил то можно считать что этот код работает идеально и на 100% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 01:22 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojinя же писал выше, что такие ключи формируются JS'ом ( 15785105 ) который трогать нельзя основной смысл в том чтобы получить, данные из вложенного массива (у которого есть в индексе буква "i") из поля id и сравнить со всеми остальными такими же полями, при совпадении прибавить к полю с индексом db столько сколько написано в поле db у найденного элемента 1. удалять чтобы выйти из цикла DO {} WHILE 2. тут скорее не нужен count($oiBludo) == 0 , т.к. участок кода отрабатывает не один раз, а несколько раз по количеству элементов массива, перемещение по массиву идёт от начала к концу и по мере внесения данных в $oiBludo в исходном массиве эти данные удаляются 3. во-первых: если таким += образом сложить текстовые величины (а они текстовые), то это получится что строка просто увеличится (отработает ни как 1+2=3, а как 1+2=12) во-вторых: db это не константа!!! (я в константах php такой не видел - покажите пожалуйста) и с этой строкой ни чего не происходит, т.к. она работает на УРА! тут получается что db это обозначение индекса 4. согласен, тут сплоховал, вот исходник: Код: php 1. 2. 3. 4. 5. 6. 7. 5. тут тоже согласен можно применить и array_merge , но в общем то не такой уж и большой код, чтобы в нём можно было запутаться P.S. ни как не продвигаюсь, я сравниваю только первые элементы, у которых в индексе есть буква "i", а остальные просто дописываю/переношу в получившийся массив, код рабочий, я выше выложил пример входящего массива (это не самое первое сообщение) и исходящего, если Вас не затруднит (чисто для себя), то можете взять мой код, входящий массив прогнать через него и получите исходящий P.P.S. по поводу одинаковых id , если внимательно посмотреть, то они находятся вообще в разных массивах (это если смотреть в любой из массивов, входящий/исходящий(конкретно тут из исходящего)) Код: php 1. 2. 3. 4. 5. 6. 7. интересно посмотреть где они выдаются (реально интересно, у меня просто даже при включенных ошибках нет ничего) согласен может быть и говнокод, написан мной лично, а выложен он сюда не для оскорблений , а для указания на ошибки и предложения своего варианта для решения поставленной задачи а поскольку ни кто ничего путного (того что могло бы создать контрольный массив на выходе), не предложил то можно считать что этот код работает идеально и на 100% Ещё раз уточню, что не пытаюсь обидеть или оскорбить... просто критикую код с точки зрения стороннего программиста, который пытается в нём разобраться :) 1. Легче проверить count($array); (избавимся от лишних строк и как минимум от одного нотиса "invalid argument in foreach" (по-моему так там пишет)) 2. Ну тут не сильно важно :) просто явно есть лишнее... оба условия будут всегда одинаковы... потому одно убрать можно :) 3.1. в пхп конкатинация строк производится через точку (пример $a.$b). Потому $a+$b - это сумма чисел :) Как строки в пхп такие переменные рассматриваться не будут. А значит даже если $a и $b изначально строки, то результат "2"+"1" будет не "21", а 3 :) 3.2. резервированное слово != константа.... я об define("db", "my constant"); 4. ... 5. запутаться то нет... но это же вопрос удобства... есть разница в чтении 10 строк по 20 символов и 10 строк по 120? ))) ответ на P.S. Я как-раз взял Ваш код, прогнал входящий массив (последний из представленных входящих), а на выходе массив $control не получил :) Было как минимум одно отличие... дальше не пошёл... ответ на P.P.S. в гугле "php online". Второй и третий результат поиска (не первый... там он багнутый какой-то, рабочий код не всегда нормально работает). Так вот... а на этих двух нормальных сервисах Вы увидите нотисы (лично я проверял на PHP Sandbox). У Вас вывод ошибок включён, а вот вывод нотисов и варнингов - нет :) Сейчас уже поздно... а вот завтра попытаюсь вникнуть в результирующий массив (как он всё же формируется) и возможно смогу предоставить свой вариант кода. Однако интересующим меня вопросом остаётся что из представленного результирующего массива не является обязательным? ну то есть его надо в точности повторить? или последовательность элементов можно менять, а ключи вообще не требуются нигде? :) я вот о чём... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 03:11 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
1. согласен 2. ... 3.1. да.... видимо запамятовал 3.2. нет такого define - проверено 4. ... 5. дык тут в строках и не по 120 символов ))))) (будем считать что этот вопрос то же закрыли) 6. (ответ на P.S.) посмотреть бы что именно вводилось и что именно получилось, т.к. тут в теме, два массива control , первый который идёт вместе с массивом array ( 15789883 ) он не верный, а вот после него ( 15790001 ) уже верный 7. (ответ на P.P.S.) для информации, не пользуюсь он-лайн сервисами, все тестирования провожу на локальном (домашнем сервере) использую NetBeans, в настройка php error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ПрограмёрОднако интересующим меня вопросом остаётся что из представленного результирующего массива не является обязательным? ну то есть его надо в точности повторить? или последовательность элементов можно менять, а ключи вообще не требуются нигде? :) я вот о чём... последовательность 4, 2, 7, 17..... должна быть сохранена (как видно на "выходном", массива с индексом 7 уже нет - так и должно быть; 7 прибавился к 4) и так же должны остаться первыми массивы с индексом "i", т.е. они не должны быть перемещены в конец или середину входной Код: php 1. 2. 3. 4. 5. 6. 7. 8. выходной Код: php 1. 2. 3. 4. 5. остальные элементы с индексом "t" могут перемещаться как угодно в пределах своего массива P.S. ну вроде бы всё разъяснил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 05:30 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, описание у вас очень путанное. постоянно добавляете новые условия и ограничения. сами не можете привести массив который должен получиться(уже три варианта привели, и не факт что не приведете еще). логики в поведении ключей почти нет. в одном месте их складываем , тут же в другом они не складываются, хотя ключи одинаковые есть.... имея такое описание - решение делать дело неблагодарное. ибо опять может появится новое условие - и алгоритм окажется неверным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 06:23 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, кстати, на каком основании у вас элемент: 14=array( 't14' =>Array('id' => 's_86', 'db' => '1'), ) попал в итоге в массив 8: 8=array( 't14' =>Array('id' => 's_86', 'db' => '1'), ) ?????? ключ s_86 нигде больше не повторяется. нискем не складывается. следовательно он должен остаться в массиве с ключем 14! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 07:15 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
если это так, то вот еще вариант: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 07:21 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
r uуже три варианта привели я же привёл сообщение в котором 100% правильный вариант выходного массива, а какие во входном массиве могут быть данные (конкретно цифры после "s_").... ну это же бог его знает, я же не буду сюда весь набор закидывать (если мне память не изменяет их там больше 500) P.S. первый (в первом сообщении) приведённый мной массив был просто тестовым с ну очень похожими данными, извините если прям всех так на него тянет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 08:40 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
r uwoojin, кстати, на каком основании у вас элемент: 14=array( 't14' =>Array('id' => 's_86', 'db' => '1'), ) попал в итоге в массив 8: 8=array( 't14' =>Array('id' => 's_86', 'db' => '1'), ) ?????? ключ s_86 нигде больше не повторяется. нискем не складывается. следовательно он должен остаться в массиве с ключем 14! на основании того что у него верхний элемент (i13) имеет 'id' => 's_216' совпадающий с 'i7' => Array('id' => 's_216', 'db' => '2'), ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 08:44 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojinна основании того что у него верхний элемент (i13) имеет 'id' => 's_216' совпадающий с 'i7' => Array('id' => 's_216', 'db' => '2'), ну вот пожалуйста. появилось новое условие, о котором ранее небыло сообщено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 09:33 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
извините, я думал это было понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 10:33 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojinизвините, я думал это было понятно я тоже думал что понял наконец все)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 10:36 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
думаю смогу въехать в принцип формирования выходного массива, если поясните как t12 переплыл из элемента с ключом 12 в элемент с ключом 3 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 11:24 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
Програмёрдумаю смогу въехать в принцип формирования выходного массива, если поясните как t12 переплыл из элемента с ключом 12 в элемент с ключом 3 :) у них id = s_53 у обоих, по этому у первого db стало больше на количество указанное в db второго ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2014, 20:50 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, Жжешь. Почти как наши заказчики. Завтра, насколько я понимаю, условие задачи еще немного видоизменится. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 02:35 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojinПрограмёрдумаю смогу въехать в принцип формирования выходного массива, если поясните как t12 переплыл из элемента с ключом 12 в элемент с ключом 3 :) у них id = s_53 у обоих, по этому у первого db стало больше на количество указанное в db второго вообще-то у них s_584 :) Но тогда интересует почему t12, а не t6 (ведь в элементе с ключом 3 находится именно t6 с таким значением). Как было сказано можно менять порядок ключей "t..", но в данном случае поменялся не порядок ключей, а именно значение ключа. Так значит ключи "t.." вообще не важны как таковые и могут быть любыми? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 10:10 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
Програмёрвообще-то у них s_584 :) Но тогда интересует почему t12, а не t6 (ведь в элементе с ключом 3 находится именно t6 с таким значением). Как было сказано можно менять порядок ключей "t..", но в данном случае поменялся не порядок ключей, а именно значение ключа. Так значит ключи "t.." вообще не важны как таковые и могут быть любыми? наверное я опять что то не так сказал (мне кажется я где то выше упоминал), надо складывать db у тех элементов у которых в индексе есть i* , а все остальные (у которых t* ), просто добавлять в конец массива и элемент с индексом i* , всегда-обязательно должен быть первым ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 10:47 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojinПрограмёрвообще-то у них s_584 :) Но тогда интересует почему t12, а не t6 (ведь в элементе с ключом 3 находится именно t6 с таким значением). Как было сказано можно менять порядок ключей "t..", но в данном случае поменялся не порядок ключей, а именно значение ключа. Так значит ключи "t.." вообще не важны как таковые и могут быть любыми? наверное я опять что то не так сказал (мне кажется я где то выше упоминал), надо складывать db у тех элементов у которых в индексе есть i* , а все остальные (у которых t* ), просто добавлять в конец массива и элемент с индексом i* , всегда-обязательно должен быть первым УРА ))) наконец-то сошлось (про складывания элементов только с индексом "i*" вы ещё не говорили) :) 1. есть двухмерный массив (точнее массив массивов) объектов "array(array('имя' => array('id', 'db')) [, array('имя' => array('id', 'db'))])". Пускай ключ такого вложенного массива будем называть именем объекта, а внутренние массивы (в которых лежат объекты) назовём группами... тогда ... 2. Группы в которых есть объекты с именем формата "i*" и одинаковыми 'id' сливаются. 3. При сливании групп все объекты кроме первого с одинаковыми 'id' и именем формата "i*" удаляются, а значение "db" оставшегося (с именем "i*") объекта заменяется суммой значений всех элементов с данным 'id'. Вот правила. которые Вы так старались описать :) С этой частью закончили... следующее... Может ли в одной группе быть 2 или более элементов с именем "I*"? Если может, то как проводить слияние таких групп в случае (?): Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. то есть любые две группы могут быть слиты в одну? будем ли мы сливать их все в одну? или как-то попарно? или такой вариант вообще не возможен? и ещё... если у нас есть 2 объекта с одинаковым именем формата "t*" в группах, которые сливаются, как поступить с такими объектами? ведь мы их не сливаем... но если не проделать какие либо доп. операции, то из всех одноимённых объектов в группе останется только один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 12:30 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
Код: 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. Это код замечу не айс, думаю тут могут в разы лучше написать :) Но всё же это менее путано чем у Вас ;) На выходе нужный массив... при этом везде рассчитано на соблюдение условия, что элементы с ключом i* идут первыми (то есть мы их в группе не ищем, а сразу знаем что они первые). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2014, 19:06 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
ПрограмёрМожет ли в одной группе быть 2 или более элементов с именем "I*"? не может, всегда только 1 элемент, а вот элементов "t*" может быть сколько угодно Програмёресли у нас есть 2 объекта с одинаковым именем формата "t*" в группах, которые сливаются, как поступить с такими объектами? ведь мы их не сливаем... но если не проделать какие либо доп. операции, то из всех одноимённых объектов в группе останется только один. такого тоже быть не может, т.к. (смотрим на входящий массив), все элементы идут с цифрой которая всегда больше предыдущей (у элементов i* и t* вообще получается сквозная нумерация) ПрограмёрЭто код замечу не айс, думаю тут могут в разы лучше написать :) Но всё же это менее путано чем у Вас ;) На выходе нужный массив... при этом везде рассчитано на соблюдение условия, что элементы с ключом i* идут первыми (то есть мы их в группе не ищем, а сразу знаем что они первые). на другом форуме дали более изящное решение. чем моё и Ваше Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. вот такую корректировку внёс уже я, заменил $array[$map[$i['id']][0]] на ссылочную переменную $tmp Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2014, 06:41 |
|
||
|
уменьшение массива-массивов
|
|||
|---|---|---|---|
|
#18+
woojin, Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Мне показалось удобным выделить операцию слияния групп в функцию. Ну это на Ваше усмотрение (просто мне такой код кажется удобнее). А вообще, Вам дали вполне достойный вариант :) В общем даже придраться нету к чему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2014, 11:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=23&tid=1462927]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 428ms |

| 0 / 0 |
