Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PHP, Perl, Python Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: PHP - поменять ключ в массиве  [new]
Alibek B.
Member

Откуда:
Сообщений: 2990
Karbafos
Второй более оптимален в таком варианте.

Если говорить абстрактно, то видимо да. В Perl хеши вообще неупорядоченны и это обычно не мешает.
Но в моей задаче хранение справочника в массиве это только часть задачи. Мне в определенных случаях нужно использовать исходную последовательность элементов.
Эту последовательность можно получить тремя способами:
1. Изменить ключ - если это вообще возможно, это был бы лучший способ.
2. Пересобрать массив (с использованием range или flip) - надёжно, но неэффективно и теоретически возможны утечки памяти (если GC будет работать недостаточно эффективно).
3. Добавлять элемент с новым ключом (моим способом), а затем сортировать полученный массив с помощью uksort. Но тут под вопросом производительность.
1 янв 19, 17:58    [21777374]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
Alibek B.
Member

Откуда:
Сообщений: 2990
полудух
парсеры иди пиши, а не ИФ, твоя архитектура - говно.

Видно птицу по полету, а малолетку по помету лексикону.
1 янв 19, 18:03    [21777376]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
Alibek B.
Member

Откуда:
Сообщений: 2990
Karbafos
Ты не можешь сохранить порядок элементов в хэше, никак, это как запрос select из базы без order by, порядок не гарантируется.

Это про PHP или Perl?
В PHP массивы прекрасно упорядочиваются.
Собственно это одно из преимуществ PHP в моем случае, благодаря этой особенности формировать JSON намного проще. В Perl генерация JSON с упорядоченными элементами будет сложнее.
1 янв 19, 18:29    [21777383]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
Karbafos
Member

Откуда:
Сообщений: 454
Alibek B.
Karbafos
Ты не можешь сохранить порядок элементов в хэше, никак, это как запрос select из базы без order by, порядок не гарантируется.

Это про PHP или Perl?
В PHP массивы прекрасно упорядочиваются.
Собственно это одно из преимуществ PHP в моем случае, благодаря этой особенности формировать JSON намного проще. В Perl генерация JSON с упорядоченными элементами будет сложнее.


Речь про php и его массивы, которые практически в любом виде -- хеши.
Новый ключ -- новое распределение внутри бакетов, новый порядок. Речь разумеется об оригинальном массиве, а не отсортированном после изменения.

В любом случае, если такой вопрос возникает, значит что-то делается неправильно и есть путь более простой.
1 янв 19, 18:44    [21777384]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
vkle
Member

Откуда: Самара
Сообщений: 14520
Alibek B.
1. Изменить ключ - если это вообще возможно, это был бы лучший способ.


Если все так плохо, что остальные способы не годятся, то несколько фантастический вариант - написать свое расширение PHP с реализацией требуемой функции. Непросто, конечно, да и поддерживать его придется.

Просто любопытно, при каких количествах элементов, обновлений, обращений вопрос столь жестко уперся именно в производительность на этапе обновления номера телефона?
1 янв 19, 18:59    [21777389]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
Karbafos
Member

Откуда:
Сообщений: 454
vkle
Alibek B.
1. Изменить ключ - если это вообще возможно, это был бы лучший способ.


Если все так плохо, что остальные способы не годятся, то несколько фантастический вариант - написать свое расширение PHP с реализацией требуемой функции. Непросто, конечно, да и поддерживать его придется.

Просто любопытно, при каких количествах элементов, обновлений, обращений вопрос столь жестко уперся именно в производительность на этапе обновления номера телефона?


судя по всему, вопрос не в производительности, а в порядке элементов в json, где-то он важен,
но если это так, до реально дичь какая-то происходит
1 янв 19, 19:54    [21777398]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
vkle
Member

Откуда: Самара
Сообщений: 14520
Karbafos,

Так я понял, что и то и другое важно. В посте 21777374 про эффективность (впрочем, это понятие весьма расплывчатое) и производительность упоминается. Да и раньше тож.
1 янв 19, 20:13    [21777408]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
Alibek B.
Member

Откуда:
Сообщений: 2990
vkle
написать свое расширение PHP с реализацией требуемой функции

Это слишком сложно для меня.
Мне нужно автоматизировать одну задачу без слишком больших трудозатрат.
Чтобы написать свое расширение PHP, нужно слишком глубоко погружаться.

Karbafos
а в порядке элементов в json, где-то он важен, но если это так, до реально дичь какая-то происходит

Тут наложение двух особенностей.
Во-первых — мне нужно сделать интеграцию двух систем, своей и внешней, и своя не поддерживает события. Поэтому вместо обработчика события я периодически получаю с двух систем наборы данных, сравниваю их между собой и формирую задания на синхронизацию наборов.
Во-первых — мне нужно работать с внешним REST-сервисом, в котором стиль REST несколько расширяется — в GET/POST можно передать массив элементов и запрос вернет результат для переданного массива (вместо построчной обработки).
Поэтому в итоге мне нужно направить на внешний сервер один массив данных, а затем другой, в котором сущности перечислены в том же порядке.

vkle
Так я понял, что и то и другое важно

Если это возможно, то лучше всегда написать что-то более эффективное, чем что-то менее эффективное.
Эффективность — это и производительность (впрочем ее в любом случае хватает), и минимизация использования ресурсов.
Если планируется, что скрипт будет подолгу работать в круглосуточном режиме, то любые массовые манипуляции с массивами могут выливаться в утечки памяти.
1 янв 19, 20:31    [21777416]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
vkle
Member

Откуда: Самара
Сообщений: 14520
Alibek B.
Если это возможно, то лучше всегда написать что-то более эффективное, чем что-то менее эффективное.
Дык, кто же спорит? Нет предела совершенству! :)

Alibek B.
минимизация использования ресурсов
Пожалуй, дополню.
Ваше время, потраченное на решение задачи - тоже ресурс. Невосполнимый. Потратив час на решение, Вы не сможете использовать этот самый час в каких-то других целях. При таком раскладе эффективным решением будет второй или третий вариант, раз уж с производительностью нет особых проблем. Или, даже четвертый, где новый массив будет создан с нуля вместо старого. Заодно и природную лень можно потешить - не придется, скорее всего, решать проблему утечки памяти, если таковая вылезет в этом месте.
К тому же, начальству до фонаря, скорее всего, как именно решена задача. Будет готово к вечеру - "отлично!", через два дня "ну ладно, хорошо", а ежле неделю искать красивое решение - "чего вы там возюкаетесь??". Ну как-то так.

Alibek B.
скрипт будет подолгу работать в круглосуточном режиме
И что с того, что в круглосуточном? Важно, сколько и каких будет проведено итераций за единицу времени. Так то, не составляет проблем положить sleep() внутрь бесконечного цикла - да хоть год пусть работает, ничего с ним не случится. :) Ну а если серьезно, были у меня долгоиграйки на пхп, работавшие от нескольких часов до пары недель с периодичностью итераций порядка нескольких секунд, с обращением к внешним ресурсам (мускуль, мемкеш, файлы, что-то по http). В начале главного цикла инициализация всех внутренних переменных, в основном. Ну и корректная обработка недоступности ресурсов. И ничего особенного, никто не помер и память не выжрал. Появилась бы какая серьезная проблема в долгоиграйстве - ну перезапустить можно раза два или три за сутки. Этого никто вообще не заметит! Конечно, если только скрипт не будет пол-часа инициализироваться. :) Вот если ресурсов на пять минут работы не хватает - тогда да, тогда серьезная проблема.
1 янв 19, 21:44    [21777436]     Ответить | Цитировать Сообщить модератору
 Re: PHP - поменять ключ в массиве  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1497
прям какая-то фобия утечек...

потраченное на решение задачи - тоже ресурс

+++
2 янв 19, 11:59    [21777540]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / PHP, Perl, Python Ответить