Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=38596112&tid=1462927]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 400ms |

| 0 / 0 |
