Титла: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 14, 2014, 19:12 Здравейте,
опитвам се да сортирам 2 свързани масива, като използвам array_multisort($ar1,SORT_ASC,$ar2); когато използвам като тестов пример $ar1=Array (
[2] => кайсия [3] => слива ) ----------------------- ----------------------- $ar2=Array ( [2] => стоян [3] => иван ) всичко е наред и резултатът е $ar1=Array ( [2] => слива [3] => ябълка ) ----------------------- ----------------------- $ar2=Array ( [2] => иван [3] => иван ) Когато обаче използвам реални данни (от MySql таблица): $ar1=Array ( [2] => Ноктюрно [3] => Пролетно тайнство [4] => La Traviata [5] => Цвета ) ----------------------- ----------------------- $ar2=Array ( [2] => Лист, Ференц [3] => Стравински Игор [4] => Verdi, Giuseppe [5] => Атанасов, Маестро Георги ) След подреждането: $ar1=Array ( [2] => Ноктюрно [3] => Пролетно тайнство [4] => La Traviata [5] => Цвета ) ----------------------- ----------------------- $ar2=Array ( [2] => Лист, Ференц [3] => Стравински, Игор [4] => Verdi, Giuseppe [5] => Атанасов, Маестро Георги ) ----------------------- т. е. няма коректно подреждане. Използването на setlocale(LC_ALL,'bg_BG.UTF-8'); и опциите SORT_LOCALE_STRING или SORT_STRING не променя резултата. Таблицата ми е с колация utf8_general_ci. Къде греша? ПС Системата ми преформатира индексите, първият не е точка (bullet), а 0 (нула). Титла: Re: Некоректно сортиране в PHP Публикувано от: pennywise в Apr 14, 2014, 19:41 Можеш ли да сложиш кода в пейстбин или нещо подобно така както е?
Титла: Re: Некоректно сортиране в PHP Публикувано от: neter в Apr 14, 2014, 22:42 Не просто няма коректно подреждане, ами няма никакво подреждане - поредността им си е останала същата. Нещо явно бъркаш изначално, така че наистина трябва да видим истинския код, който изпълняваш. А и двете (тестовият и реалният примери) ли ги изпълняваш през един и същи интерпретатор, или например едното го изпълняваш в конзолата, а другото - през браузъра?
Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 16, 2014, 08:48 Данните са от таблицата (това са всичките данни от нея). Ако дам сортиране по низходящ ред:
Array (
[2] => Пролетно тайнство [3] => Ноктюрно [4] => Симфоничен концерт [5] => Аида ) т. е. обръща се реда, но взаимното положение на елементите се запазва. Това се получава при реалните данни от базата, a когато въведа ръчно същите данни в масивите всичко е ОК: ----------------------- Array ( [2] => Пролетно тайнство [3] => Симфоничен концерт [4] => Цвета [5] => La Traviata ) ----------------------- ----------------------- Array ( [2] => Стравински, Игор [3] => Бетовен, Лудвиг ван [4] => Атанасов, Маестро Георги [5] => Verdi, Giuseppe ) ----------------------- Затова предполагам, че е нещо свързано с колацията. Но какво? Титла: Re: Некоректно сортиране в PHP Публикувано от: BRADATA в Apr 16, 2014, 09:10 Човече, няма как да се помогне ако не видим ПРОГРАМНИЯ КОД НА СОРТИРАЩАТА ФУНКЦИЯ. Данните са ясни - дай да видим какво си натворил във функцията.
Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 16, 2014, 11:52 Визуализацията се вика с:
Код: $title='Произведение'; Функция render: Код: function render($title,$name,$data=array(),$data1=array()){ Входни данни - масив $result: Код: Array Визуализация - ls_operas.php: Цитат <?php Смених в базата колацията от utf8_general_ci на utf8_unicode_ci - без промяна. Титла: Re: Некоректно сортиране в PHP Публикувано от: BRADATA в Apr 16, 2014, 18:11 setlocale(LC_ALL,'bg_BG.UTF-8')
е добре да се постави в началото. Как се появяват данните в $data? Какво е кодирането им тогава? Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 16, 2014, 20:22 Данните в $data (всъщност $result като параметър на функцията render) са резултат от обработка на прочетените данни за дублиране на имена (aka, alias) т. е. „Верди“=„Verdi“, „Цвета“=„Македонска кървава сватба“ и т. н., като съвпадащите имена са в един запис. Кодирането им e UTF-8 (проверено с echo mb_detect_encoding($ar1[0],"auto",true);), тъй като още в началото давам mb_internal_encoding('UTF-8');
Поставянето на setlocale не променя нищо, т. е. сортирането продължава да е некоректно. Титла: Re: Некоректно сортиране в PHP Публикувано от: kifavi8024 в Apr 16, 2014, 22:15 Така, почваме като малките деца (извинявам се че така те подхванах, но какво да се прави - просто така си си задал въпроса):
0. Пускаш да ти плюе всички грешки от конфигурацията на PHP 1. Каква версия ти е PHP интерпретатора на работната среда (тестовия сървър). 2. Трябва да стане ясно какво точно се опитваш да направиш - това най-ясно се изразява с пример (Просто ни дай примерен резултат). 3. Погледни този примерен код (http://codepad.org/9MCJSVKp ($2)) и помисли над него. Искаш да се получава това, което се получава? - а то е следното: а. Подрежда първия масив по зададения ключ - SORT_ASC + SORT_STRING. b. Подрежда втория масив по начин съответстващ на позициите на първия масив. За по-добро обяснение погледни официалната документацията на функцията и примерите под нея: array_multisort php.net ($2) 4. В по-старите версии на PHP, флага SORT_LOCALE_STRING изглежда, че е невалиден! Затова винаги трябва да си пускаш всички грешки при разработване на код. Ако това не ти е достатъчно за решаването на проблема - явно нещо друго е оплескано, което пропускам. Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 17, 2014, 11:16 @Intel, по точки:
0. error_reporting(E_ALL); няма съобщения за грешки 1. PHP Version 5.3.2-1ubuntu4.24 2. искам да получа Код: [0] => Аида Код: mb_internal_encoding('UTF-8'); b. да От цитираната документация останах с впечатлението, че SORT_ASC/DESC,SORT_STRING не са необходими за втория масив. Така или иначе, и с добавянето им нищо не се променя - записите остават като моментна „картинка“, като не променят взаимното си положение (когато са от базата). 4. Виж т. 1 Цитат явно нещо друго е оплескано, което пропускам.и аз, подозирам колациите - с utf8_general_ci и utf8_unicode_ci резултатът е еднакъв, т. е. никакъв. Титла: Re: Некоректно сортиране в PHP Публикувано от: senser в Apr 17, 2014, 11:18 Защо не пробваш със записи от базата само с латински букви, т.е. без кирилица.
Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 17, 2014, 12:15 @senser, пробвах - подреждането е същото. Но това ме наведе на друга мисъл - първосигнално съм задал некоректен въпрос - към всеки запис от базата се добавя линк с id-то, така че сортирането де факто е по линкове и само по себе си е коректно. Когато данните са въведени ръчно в масивите, линковете липсват и там сортирането е друго.
Благодаря на всички отзовали се и се извинявам за изгубеното време! [_]3 Титла: Re: Некоректно сортиране в PHP Публикувано от: kifavi8024 в Apr 18, 2014, 02:52 И аз се радвам, че си намерил грешката в кода. :)
Във форума няма такова нещо като изгубено време - някой ден, някой друг ще търси за подобен проблем и тази тема най-вероятно ще му помогне [_]3 Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 22, 2014, 20:52 Без да претендирам за оптималност или елегантност, моето решение:
Входящи данни: Код: ----------------------- Код: <?php Код: function sort_ot ($data,$order) { Допълнителен въпрос: какъв dump, print_r или нещо друго мога да ползвам, така че вместо „Цвета“ да ми излиза реалното „<a href="index.php?page=spectacles&opera_id=6">Цвета</a>“? Титла: Re: Некоректно сортиране в PHP Публикувано от: go_fire в Apr 22, 2014, 21:06 Ехо?
Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 23, 2014, 08:57 Не, echo-то дава съдържението (link text), а не самия линк. Единственият вариант, до който съм стигнал е с ""Inspect element" или както се казва в конкретния браузър, но това, според мен, е по-скоро е за „фина настройка“, а не за постоянно тестване.
Титла: Re: Некоректно сортиране в PHP Публикувано от: kifavi8024 в Apr 23, 2014, 09:49 Ама гледай сега - нали си даваш сметка, че PHP връща към браузъра HTML. Затова и браузъра го форматира, а за да видиш сорс кода ти трябва да ползваш инструментите на браузъра.
Ако толкова искаш да ти се видиш html кода като нормален текст, може да ползваш нещо от този род: Код
Титла: Re: Некоректно сортиране в PHP Публикувано от: angie_bg в Apr 23, 2014, 10:13 @Intel, давам си сметка, ама сега, а не когато пуснах темата. Изобщо не се сетих за специалните символи ??? С тях получавам точно това, което ми трябваше, за да икономисам малко нерви.
Код: <a href="index.php?page=composers&composer_id=1">Верди, Джузепе</a>; <a href="index.php?page=composers&composer_id=5">Verdi, Giuseppe</a> Аида |