Титла: PHP: От array към associative array Публикувано от: b2l в Feb 11, 2012, 12:49 Пример:
Код
Да стане: Код
Някакви идеи? Титла: Re: PHP: От array към associative array Публикувано от: borovaka в Feb 11, 2012, 13:34 Код
Титла: Re: PHP: От array към associative array Публикувано от: ivo3d в Feb 11, 2012, 13:42 Ето и още един вариант
Код
Титла: Re: PHP: От array към associative array Публикувано от: b2l в Feb 11, 2012, 14:03 Благодаря :).
Титла: Re: PHP: От array към associative array Публикувано от: borovaka в Feb 11, 2012, 14:07 Даже това дето ти го предложих не трябва да е с du ами направо с while, защото ако не се подаде масив ще се обърка така :)
п.с. Сега ще го оправя :) Титла: Re: PHP: От array към associative array Публикувано от: Odido в Feb 11, 2012, 18:44 Не съм много добър с php , но според gatakka foreach е много добър за обхождане на масиви.Ето и моето предложение.
Код
Титла: Re: PHP: От array към associative array Публикувано от: b2l в Feb 11, 2012, 18:50 @ApucTokpaT примера ти не е верен. Ако някой го прочете само ще се обърка. Другите две предложения вършат работа.
Титла: Re: PHP: От array към associative array Публикувано от: Odido в Feb 11, 2012, 19:45 Ммда, прав си ,само ги изрежда в последователен ред ,извинявам се....
Титла: Re: PHP: От array към associative array Публикувано от: neter в Feb 12, 2012, 02:21 За спорта, едно решение без обичайните цикли:
Код
Титла: Re: PHP: От array към associative array Публикувано от: thecharge в Mar 25, 2012, 02:13 Пример: Код
Титла: Re: PHP: От array към associative array Публикувано от: b2l в Mar 25, 2012, 18:30 Че то кой пита как става проверката? Аз знам как става проверката...
Титла: Re: PHP: От array към associative array Публикувано от: edmon в Mar 25, 2012, 22:57 Айде сега да измерите, коя функция е по-ефективна(по-бърза, по-малко натоварваща)
хехехеех Титла: Re: PHP: От array към associative array Публикувано от: clovenhoof в Mar 26, 2012, 10:43 Според мен решението на боровака е доста по-бързо от това на нетер.
Благодарение на използваните функции в последното се извършва многократно обхождане и копиране на масиви. Не знам как е реализирано в PHP, но просто няма как да се избегне. Докато array_shift спокойно става без обхождане на масива. Титла: Re: PHP: От array към associative array Публикувано от: neter в Mar 26, 2012, 11:38 Спорен въпрос е дали решението на borovaka или на ivo3d е най-бързо, така че изборът при писане на код е хубаво да падне на някое от тези две решения - не случайно това са стандартните начини за извършване на въпросното действие. Няма нужда да се прави сравнение между тези две решения - натоварването и скоростта ще са толкова близки, че е въпрос на лична преценка на програмиста кое от двете ще му прилегне по-добре в кода. И все пак, не трябва да се забравя, че for и while циклите не са напълно взаимозаменяеми, но в конкретната ситуация няма проблем.
Моето решение е най-бавно (почти двойно по-бавно, което в случая е около 3/10000 разлика, но ако повторим действието много пъти, почти двойната разлика почва да има значение), и както казах, е само за спорта (да попълним и алтернативната графа) или ако по някаква неведома причина програмистът не може или не иска да се обърне към стандартните цикли :) Титла: Re: PHP: От array към associative array Публикувано от: b2l в Mar 26, 2012, 11:39 Как се тества бързодействие на php скрипт?
Титла: Re: PHP: От array към associative array Публикувано от: neter в Mar 26, 2012, 11:54 Как се тества бързодействие на php скрипт?Аз ползвам този клас Код Използва се така Код Удобството да се прави с клас е, че много лесно можеш да засечеш времето за изпълнение на което и да е парче код, намиращо се между създаването на обекта $timer и извеждането на резултата. Титла: Re: PHP: От array към associative array Публикувано от: b2l в Mar 26, 2012, 12:01 @neter много благодаря :).
Титла: Re: PHP: От array към associative array Публикувано от: clovenhoof в Mar 26, 2012, 12:59 Спорен въпрос е дали решението на borovaka или на ivo3d е най-бързо, така че изборът при писане на код е хубаво да падне на някое от тези две решения - не случайно това са стандартните начини за извършване на въпросното действие. Няма нужда да се прави сравнение между тези две решения - натоварването и скоростта ще са толкова близки, че е въпрос на лична преценка на програмиста кое от двете ще му прилегне по-добре в кода. И все пак, не трябва да се забравя, че for и while циклите не са напълно взаимозаменяеми, но в конкретната ситуация няма проблем. Аз сравних твоето решение с това на боровака. Сега погледнах това на ivo3d и аз лично бих избрал неговото. В C помня че do/while беше с най-добро бързодействие. Също има значение в предиката дали ще се сравнява с 0 или с някакво число. С 0 е по-бързо. Pre increment e за предпочитане пред post increment. Това обаче за C, а в РНР предполагам тези неща не важат. Титла: Re: PHP: От array към associative array Публикувано от: thecharge в Mar 26, 2012, 22:07 Че то кой пита как става проверката? Аз знам как става проверката... Как се тества бързодействие на php скрипт?... изтрито ... Какъв е най-елемнтарният скрипт за бързодействие, а имено нещо от сорта на: Код
... изтрито ... П.С. За по кратко може само: Код
редакция от neter: Редактирано, съгласно т.6 от правилата ($2) на форума Титла: Re: PHP: От array към associative array Публикувано от: SmashThePain в May 31, 2012, 23:40 Ако ще се прави с премахване на елементи от масива, което не е хубава практика, доста по-добре да се ползва pop вместо shift. Ако някой имплементира shift с константно време ще го поздравя. Вероятно хората от PHP им е през оная работа за паметта и имплементацията на shift инкрементира указателя с единица. Такова фрагментиране на паметта е опасно, особено когато се разполага с малко памет...
Премахването на елементи от масиви е много много лоша практика в случая. Това се предполага че ще бъде някаква вълшебна utility функция, която трябва да приема като аргумент масив и на изхода да връща асоциативен масив. Та по идея масивите е хубаво да се предават по референция не по стойност. От тук следва, че ще се модифицират данни на потребителя, което е неприемливо, когато си говорим за API. Титла: Re: PHP: От array към associative array Публикувано от: neter в Jun 01, 2012, 01:31 Тъй като в случая става дума за действия с данни, на практика най-доброто, което може да се направи като оптимизация, е процесът да си остане в базата данни (където би трябвало да седят данните), вместо да се извежда в PHP. С това ще постигнем разтоварване на паметта и много по-бърз процес на обработка.
Тъкмо напоследък се занимавам с обработката на една идея, за целите на която имах нужда от скрипт, който да обхожда голямо количество данни. Данните ми седят в MySQL и по инерция списах обхождането на PHP, вземайки си със заявки на части данните, за да ми стигне паметта. Само че се оказа, че така ще отнеме необозримо много време, и докато бях зациклил над варианти как да го оптимизирам, един колега ми зададе хубавия въпрос "А защо не го правиш директно в базата?". Нямах отговор поради каква причина не го правя и реших да пробвам. Резултатът беше, че тестовите данни, с които си пробвам скрипта и които са много по-малко от реалните данни, скриптът с PHP минаваше за 4 минути, а подобен алгоритъм със същите данни, но реализиран със SQL, минаваше за 5 секунди. В крайна сметка (то пак по негова идея) минах на съвсем друг алгоритъм (още по-бърз) за обхождане и от две седмици насам правя обработката на реалните данни, подготвил съм се да приключа след някой и друг месец, и не мога да си представя колко време щеше да му трябва, ако бях останал на реализация с PHP. Както стана дума и в една друга тема, всеки език с целите си. Когато става дума за обхождания на данни, езикът за това е SQL, мястото е базата данни и всяка друга реализация е излишно губене на време и ресурси :) Титла: Re: PHP: От array към associative array Публикувано от: Naka в Jun 01, 2012, 10:18 Искам само да добавя, че от това с какъв тип цикъл ще се обхожда масива (for, foreach/while), зависи от това дали индексите в източника масив ще са подредени и поредни.
например при това индексите вървят 0,1,2,3,4,5....: Код: [0] => id но такъв масив спокойно може да изглежда и така: Код: [0] => id Много пъти ми се е случвало входящият масив да се получава в резултат на някакви предварителни обработки и да нямам 100% сигурност, че индексите ще са подредени и поредни. Затова най-сигурното е обхождане с 'foreach' или 'while' . В php всички масива са асоциативни. И входящият масив също ти е асоциативен. Титла: Re: PHP: От array към associative array Публикувано от: SmashThePain в Jun 01, 2012, 11:24 @Naka това само в език от високо ниво може да стане. Няма ясно разграничаване между масив и хеш таблица. Ако правя API за масиви, проблемът със sparse arrays няма да е мой проблем. Ако някой подава подобни масиви има сериозен проблем с четенето и разбирането на API-то.
Итераторите като foreach обикновенно са доста по-тежки от един нормален for цикъл. За PHP не мога да говоря в дълбочина, но за JavaScript мога. Та в JavaScript енджините имат оптимизации когато говорим за обхождане с for цикъл и последователни числови индекси. Същото ако го направиш с for-in цикъл нещата ще двойно по-бани. В примера тук дори for цикъла може да се оптимизира, като се кешира стойността на `count' вместо да се извиква на всяка итерация. Щях да те питам, кога ти се е налагало да итерираш масив с разбъркани индекси? Титла: Re: PHP: От array към associative array Публикувано от: VladSun в Jun 22, 2012, 22:14 Код
Титла: Re: PHP: От array към associative array Публикувано от: VladSun в Jun 25, 2012, 23:14 Всъщност не е добра идея - потребителски дефинираната информация може да "презапише" ключовете при array_flip(). Освен това array_flip би могла предизвика E_NOTICE за невалидните ключове дефинирани от информационната част.
Титла: Re: PHP: От array към associative array Публикувано от: nask00 в Jul 12, 2012, 17:23 Как се тества бързодействие на php скрипт?С time() ;) |