qwer123
31.05.2014 - 13:59
Все еще требуется помощь!
sergeiss
31.05.2014 - 17:00
Твоя проблема в том, что ты не читаешь мануалы. Либо читаешь, но не понимаешь. Либо понимаешь, но специально делаешь "не так".
Что написано в мануале? Вот здесь
http://ru2.php.net/manual/ru/function.array-diff-uassoc.phpЦитата |
key_compare_func Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй. |
Четко сказано, что должна вернуть функция сравнения: 0, 1 или -1, в зависимости от параметров. Кстати говоря, за счет этого можно сделать обратный порядок сортировки.
А ты что хочешь получить?
Цитата |
при нормальной калбек ф-и нормальные результаты, а при пустой, такие результаты??? |
В мануале сказано, что именно функция должна вернуть (см. цитату выше). Про пустую функцию в мануале ничего не сказано - потому что тут она не нужна.
Ты еще попробуй передать туда не массивы, а целые числа, строки, пустые функции сравнения... И потом поспрашивай: а чО за хрень я получаю?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
31.05.2014 - 18:13
Цитата |
Твоя проблема в том, что ты не читаешь мануалы. Либо читаешь, но не понимаешь. Либо понимаешь, но специально делаешь "не так".
Что написано в мануале? Вот здесь http://ru2.php.net/manual/ru/function.array-diff-uassoc.php Цитата key_compare_func Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй.
Четко сказано, что должна вернуть функция сравнения: 0, 1 или -1, в зависимости от параметров. Кстати говоря, за счет этого можно сделать обратный порядок сортировки.
А ты что хочешь получить? Цитата при нормальной калбек ф-и нормальные результаты, а при пустой, такие результаты???
В мануале сказано, что именно функция должна вернуть (см. цитату выше). Про пустую функцию в мануале ничего не сказано - потому что тут она не нужна.
Ты еще попробуй передать туда не массивы, а целые числа, строки, пустые функции сравнения... И потом поспрашивай: а чО за хрень я получаю? smile.gif |
Правильно ли я вас понимаю???? Если ф-я пустая, то результаты возвращаются в случайным образом???
sergeiss
31.05.2014 - 18:41
Цитата (qwer123 @ 31.05.2014 - 18:13) |
Если ф-я пустая, то результаты возвращаются в случайным образом??? |
Если функция пустая, то это криворукость программиста. По-другому я не знаю, как это охарактеризовать.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
31.05.2014 - 19:00
Цитата |
Если функция пустая, то это криворукость программиста. По-другому я не знаю, как это охарактеризовать. |
Но ведь обрабатывает же с такой ситуацией? вам самому не интересно по какому принципу она отборку берет, что возникают такие результаты?
sergeiss
31.05.2014 - 19:10
Цитата (qwer123 @ 31.05.2014 - 19:00) |
не интересно по какому принципу она отборку берет, что возникают такие результаты? |
Нет, не интересно
Хотя я и могу предположить, почему получается то, что получается. Но не хочу.
Потому что в ПХП очень много разных функций. Можно для каждой их них пытаться использовать неправильные параметры и пытаться их интерпретировать. Вопрос: а смысл какой в этом? Лучше потратить это время (и силы) на изучение того, как оно правильно работает. И еще с 2-3-5 десятков/сотен функций изучить за это время.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
31.05.2014 - 19:15
Цитата |
Нет, не интересно smile.gif Хотя я и могу предположить, почему получается то, что получается. Но не хочу. Потому что в ПХП очень много разных функций. Можно для каждой их них пытаться использовать неправильные параметры и пытаться их интерпретировать. Вопрос: а смысл какой в этом? Лучше потратить это время (и силы) на изучение того, как оно правильно работает. И еще с 2-3-5 десятков/сотен функций изучить за это время. |
Вы не могли бы мне подсказать свое предположение, почему оно так получается? Мне это очень нужно! В ваших словах есть правда, но поймите и меня, раз взялся, значит надо довести до конца!
sergeiss
31.05.2014 - 19:25
Цитата (qwer123 @ 31.05.2014 - 19:15) |
Мне это очень нужно! |
Что "это"? Понять, почему функция работает неправильно при неправильных параметрах? А мне вот не интересно это, например... Мне всегда было интереснее понять, какие параметры правильные и что я получаю при ПРАВИЛЬНЫХ параметрах.
Если кому-то интересно, пусть думают вместе с тобой об использовании неправильных параметров. Но не я.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
31.05.2014 - 19:30
Цитата |
Что "это"? Понять, почему функция работает неправильно при неправильных параметрах? А мне вот не интересно это, например... Мне всегда было интереснее понять, какие параметры правильные и что я получаю при ПРАВИЛЬНЫХ параметрах. Если кому-то интересно, пусть думают вместе с тобой об использовании неправильных параметров. Но не я. |
Ясно, но все равно спасибо!
Цитата (qwer123 @ 23.05.2014 - 11:59) |
Я просто не могу уловить логику сравнения, это для меня важно, как оно так сравнивает, что при нормальной калбек ф-и нормальные результаты, а при пустой, такие результаты??? |
В мануале, колбек функция ДОЛЖНА возвращать ЦЕЛОЕ (0, 1 или -1) соответственно это обязательное условие. Т.е. когда в результате сравнения a и b вернуть 0 или NULL (хотя это не одно и то же, а пустая функция возвращает NULL), для функции array_diff_uassoc() эти два элемента будут считаться тождественно равные, что не есть правильно, отсюда и неправильный результат.
Можно найти где-то тут почему так получается, я тут плохо понимаю некоторые конструкции языка C, хотя очень похоже на php.
http://lxr.php.net/xref/PHP_5_3/ext/standard/array.c#3707Для меня лично не понятно другое - для чего в колбек функцию для сравнения передавать аргументы только одного сравниваемого массива. В примере выше например func_get_args() возвращает для сравнения аргументы только массива $array1. Т.е. когда массив очень большой, тогда тут нелогично получится сравнивать. Ведь интересует только сравенние между $array1 и $array2
qwer123
31.05.2014 - 23:37
Цитата |
В мануале, колбек функция ДОЛЖНА возвращать ЦЕЛОЕ (0, 1 или -1) соответственно это обязательное условие. Т.е. когда в результате сравнения a и b вернуть 0 или NULL (хотя это не одно и то же, а пустая функция возвращает NULL), для функции array_diff_uassoc() эти два элемента будут считаться тождественно равные, что не есть правильно, отсюда и неправильный результат.
Можно найти где-то тут почему так получается, я тут плохо понимаю некоторые конструкции языка C, хотя очень похоже на php. http://lxr.php.net/xref/PHP_5_3/ext/standard/array.c#3707
Для меня лично не понятно другое - для чего в колбек функцию для сравнения передавать аргументы только одного сравниваемого массива. В примере выше например func_get_args() возвращает для сравнения аргументы только массива $array1. Т.е. когда массив очень большой, тогда тут нелогично получится сравнивать. Ведь интересует только сравенние между $array1 и $array2 |
Спасибо, я качал исходники смотрел, ничего не понятно,но видимо, это единственный вариант, чтобы понять!
В исходниках не то чтобы совсем не понятно, но так сразу чтоб прочитать и разобрать, не прочитав ни одной книжки про С, было бы наглостью по отношению к программистам )
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.