|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Можно ли в существующем массиве изменить ключ элемента? Такое разумеется не сработало: Код: php 1. 2. 3. 4. 5. 6. 7.
Ну а [&$v=>&$v] не компилируется. Есть какие-нибудь обходные способы? Пока что наиболее близкое получилось такое: Код: php 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2018, 13:16 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 00:38 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Код: php 1. 2.
в компах нет никакой "магии" всё есть "последовательность байтов" (из 0/1), а на нижнем уровне просто набор инструкций - куда чего в памяти переместить/посчитать ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 03:05 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
полудух, ТС такой же вариант написал, и даже лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 08:34 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Hettполудух, ТС такой же вариант написал, и даже лучше. это? автор Код: php 1. 2.
рановато вы праздновать начали ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 08:51 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
полудух Код: php 1. 2.
Так себе решение. Такой способ очевиден, он далеко не лучший. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 19:22 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B.он далеко не лучшийВ каком отношении не лучший и почему, что конкретно в этом способе плохо? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 19:36 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
а) Не сохраняет порядок элементов. б) Копирует элемент массива вместо копирования ссылки на элемент. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 21:41 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
вы удаляете этот элемент, какая ещё ссылка ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 21:47 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B., а) Ну дык порядок и не должен сохраняться при такой операции. Об этом где-то в инструкции по PHP сказано. Другой вопрос, если такое поведение PHP, как изменение порядка элементов, не подходит для конкретной Вашей задачи . Тут уж, звиняйте. Но оно никак не отвечает на вопрос о том, что плохо в этом способе или что хорошо. б) Об этом (клонирование или дублирование фрагмента памяти, содержащего данные) где-то явно сказано или Вы смотрели исходники PHP в части манипуляций с элементами массива? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 22:24 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
полудухвы удаляете этот элемент, какая ещё ссылка Это заблуждение. unset не удаляет содержимое элемента. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 23:23 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
vkleОб этом (клонирование или дублирование фрагмента памяти, содержащего данные) где-то явно сказано http://php.net/manual/ru/language.references.whatdo.php ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 23:25 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
vkleНо оно никак не отвечает на вопрос о том, что плохо в этом способе или что хорошо. Мне - отвечает. Вопрос был в том, как поменять ключ. При чистом изменении ключа сам массив меняться не должен, равно как порядок элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2018, 23:29 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B.vkleОб этом (клонирование или дублирование фрагмента памяти, содержащего данные) где-то явно сказано http://php.net/manual/ru/language.references.whatdo.php При чем тут ссылки то? Хотя, если хотите использовать ссылки, то там как раз сказано: обе переменные указывают на одни и те же данные и никакого копирования не происходит Однако, раз уж говорим тут о присваивании вида $b = $a , то для скалярных переменных - в мануале смотрите тут http://php.net/manual/ru/features.gc.refcounting-basics.php Пример #3 . Таки ссылка добавляется. Для объектов происходит присваивание по ссылке, об этом явно сказано тут: http://php.net/manual/ru/language.operators.assignment.php Таким образом, насчет копирования Вы ошибаетесь в любом случае. Alibek B.При чистом изменении ключа сам массив меняться не должен, равно как порядок элементов.Вполне возможно, если в ЯП присутствует функция, которая именно так работает. Но, увы. Несмотря на довольно обширный набор функций PHP для работы с массивами http://php.net/manual/ru/book.array.php ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 00:26 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B.полудухвы удаляете этот элемент, какая ещё ссылка Это заблуждение. unset не удаляет содержимое элемента. http://fi2.php.net/manual/ru/function.unset.php Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
// удаляем один элемент массива ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 06:15 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Заблуждение не перестает быть таковым, независимо от количества повторений. Код: php 1. 2. 3. 4. 5. 6. 7. 8.
Посоветую читать англоязычную документацию. И посмотреть в словарях значения слов remove и destroy. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 08:48 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
полудухAlibek B.пропущено... Это заблуждение. unset не удаляет содержимое элемента. http://fi2.php.net/manual/ru/function.unset.php Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
// удаляем один элемент массива Ну, с Новым годом! Элемент массива (ссылка на область памяти, где хранится значение) и содержимое элемента массива (область памяти, выделенная для хранения значения) совсем не одно и то же. Вы можете удалить элемент из массива или удалить переменную, но очисткой памяти от неиспользуемых данных занимается механизм Garbage Collection, он же сборщик мусора. Если он включен, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 11:22 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B.Заблуждение не перестает быть таковым, независимо от количества повторений. Код: php 1. 2. 3. 4. 5. 6. 7. 8.
Посоветую читать англоязычную документацию. И посмотреть в словарях значения слов remove и destroy. вы укуренный чтоли там ещё в добавок нахрена вы копируете $lazarus['a'] в отдельную переменную, а затем эту переменную ставите в $lazarus['b] ?!? и вуаля - ФОКУС ГОТОВ! при этом $lazarus['a'] там, как и положено, благополучно удалён unset-ом зы: и можете даже ссылку убрать - эффект тот же. vkleНу, с Новым годом! Элемент массива (ссылка на область памяти, где хранится значение) и содержимое элемента массива (область памяти, выделенная для хранения значения) совсем не одно и то же. Вы можете удалить элемент из массива или удалить переменную, но очисткой памяти от неиспользуемых данных занимается механизм Garbage Collection, он же сборщик мусора. Если он включен, конечно. угу, счастья, здоровья... а вдруг прогер внезапно пишет на C++ и САМ удаляет всё за собой? в пхп таки есть ГЦ, но это неважно Удалён он там физически или ждём ГЦ, а в массиве его уже нет после unset(). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 12:06 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
полудухзы: и можете даже ссылку убрать - эффект тот же. Смешной ты и необразованный. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 12:14 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Код: php 1. 2. 3. 4. 5. 6. 7.
Alibek B., я думаю, Вы бы и самостоятельно додумались до такого грубого решения. Но если так, почему такие вопросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 15:04 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Не до такого, как вариант с сохранением порядка элементов я думал использовать range с последующим combine. Но и это опять же не замена ключа в массиве, а формирование нового массива. Мне интересно именно изменить ключ. Может быть есть такой способ, просто я его не знаю, так как PHP я использую от случая к случаю и утилитарно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 15:27 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Что касается задачи, то я пишу скрипт-сервис (работающий как демон), который взаимодействует с внешней системой. В этом скрипте есть вспомогательный справочник (массив), используемый для быстрого поиска данных пользователей по номеру телефона (номер телефона - ключ). Но в информационной системе у пользователей номер телефона может меняться и в этом случай справочник нужно обновить. При этом по определенным причинам хотелось бы сохранить порядок элементов в справочнике. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 15:33 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B.полудухзы: и можете даже ссылку убрать - эффект тот же. Смешной ты и необразованный. а ты тупой, как воробушек. в примере опят unset() отработал именно так, как и должен был а именно - удалил элементы массива. надежды на то, что он сотрёт r2 вместе со ссылкой опять же подчёркивают полную безграмотность вопрошающего юнца (даже если допустить, что вместо &$a1 там &$a2) очень хочется верить, что эти "гениальные" примеры перерастут во что-то стоящее ДО следующего нового года. Alibek B.Что касается задачи, то я пишу скрипт-сервис (работающий как демон), который взаимодействует с внешней системой. В этом скрипте есть вспомогательный справочник (массив), используемый для быстрого поиска данных пользователей по номеру телефона (номер телефона - ключ). Но в информационной системе у пользователей номер телефона может меняться и в этом случай справочник нужно обновить. При этом по определенным причинам хотелось бы сохранить порядок элементов в справочнике. потому что БД лишний раз дёргать не хочется ты ещё и коллега, студент причина тут одна - неопытный дурачок кастует самому себе (и людям, что гораздо важнее) палки в колёсах парсеры иди пиши, а не ИФ, твоя архитектура - говно. Модератор: За своими словами следите, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 16:53 |
|
PHP - поменять ключ в массиве
|
|||
---|---|---|---|
#18+
Alibek B.Что касается задачи, то я пишу скрипт-сервис (работающий как демон), который взаимодействует с внешней системой. В этом скрипте есть вспомогательный справочник (массив), используемый для быстрого поиска данных пользователей по номеру телефона (номер телефона - ключ). Но в информационной системе у пользователей номер телефона может меняться и в этом случай справочник нужно обновить. При этом по определенным причинам хотелось бы сохранить порядок элементов в справочнике. Ты не можешь сохранить порядок элементов в хэше, никак, это как запрос select из базы без order by, порядок не гарантируется. Тем более, что при перестроении списка ключей связи меняются. Поиск по ключу хеша это O(1), ему пофиг на порядок, он итак быстрый. Сравни вывод для Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
и Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Они идентичны. Не нужно без повода использовать & Вот пример опкодов для $a[$new] = &$a[$old]; Код: plaintext 1. 2. 3. 4. 5. 6.
и $a[$new] = $a[$old]; Код: plaintext 1. 2. 3. 4. 5.
Второй более оптимален в таком варианте. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2019, 17:24 |
|
|
start [/forum/topic.php?fid=23&msg=39755302&tid=1460047]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
104ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 322ms |
total: | 529ms |
0 / 0 |