[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите понять логику array_diff_uassoc
Страницы: 1, 2
qwer123
Все еще требуется помощь!
sergeiss
Твоя проблема в том, что ты не читаешь мануалы. Либо читаешь, но не понимаешь. Либо понимаешь, но специально делаешь "не так".

Что написано в мануале? Вот здесь http://ru2.php.net/manual/ru/function.array-diff-uassoc.php
Цитата
key_compare_func
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй.

Четко сказано, что должна вернуть функция сравнения: 0, 1 или -1, в зависимости от параметров. Кстати говоря, за счет этого можно сделать обратный порядок сортировки.

А ты что хочешь получить?
Цитата
при нормальной калбек ф-и нормальные результаты, а при пустой, такие результаты???


В мануале сказано, что именно функция должна вернуть (см. цитату выше). Про пустую функцию в мануале ничего не сказано - потому что тут она не нужна.

Ты еще попробуй передать туда не массивы, а целые числа, строки, пустые функции сравнения... И потом поспрашивай: а чО за хрень я получаю? smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
qwer123
Цитата
Твоя проблема в том, что ты не читаешь мануалы. Либо читаешь, но не понимаешь. Либо понимаешь, но специально делаешь "не так".

Что написано в мануале? Вот здесь http://ru2.php.net/manual/ru/function.array-diff-uassoc.php
Цитата
key_compare_func
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй.

Четко сказано, что должна вернуть функция сравнения: 0, 1 или -1, в зависимости от параметров. Кстати говоря, за счет этого можно сделать обратный порядок сортировки.

А ты что хочешь получить?
Цитата
при нормальной калбек ф-и нормальные результаты, а при пустой, такие результаты???


В мануале сказано, что именно функция должна вернуть (см. цитату выше). Про пустую функцию в мануале ничего не сказано - потому что тут она не нужна.

Ты еще попробуй передать туда не массивы, а целые числа, строки, пустые функции сравнения... И потом поспрашивай: а чО за хрень я получаю? smile.gif


Правильно ли я вас понимаю???? Если ф-я пустая, то результаты возвращаются в случайным образом???
sergeiss
Цитата (qwer123 @ 31.05.2014 - 18:13)
Если ф-я пустая, то результаты возвращаются в случайным образом???

Если функция пустая, то это криворукость программиста. По-другому я не знаю, как это охарактеризовать.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
qwer123
Цитата
Если функция пустая, то это криворукость программиста. По-другому я не знаю, как это охарактеризовать.


Но ведь обрабатывает же с такой ситуацией? вам самому не интересно по какому принципу она отборку берет, что возникают такие результаты?
sergeiss
Цитата (qwer123 @ 31.05.2014 - 19:00)
не интересно по какому принципу она отборку берет, что возникают такие результаты?

Нет, не интересно smile.gif Хотя я и могу предположить, почему получается то, что получается. Но не хочу.
Потому что в ПХП очень много разных функций. Можно для каждой их них пытаться использовать неправильные параметры и пытаться их интерпретировать. Вопрос: а смысл какой в этом? Лучше потратить это время (и силы) на изучение того, как оно правильно работает. И еще с 2-3-5 десятков/сотен функций изучить за это время.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
qwer123
Цитата
Нет, не интересно smile.gif Хотя я и могу предположить, почему получается то, что получается. Но не хочу.
Потому что в ПХП очень много разных функций. Можно для каждой их них пытаться использовать неправильные параметры и пытаться их интерпретировать. Вопрос: а смысл какой в этом? Лучше потратить это время (и силы) на изучение того, как оно правильно работает. И еще с 2-3-5 десятков/сотен функций изучить за это время.


Вы не могли бы мне подсказать свое предположение, почему оно так получается? Мне это очень нужно! В ваших словах есть правда, но поймите и меня, раз взялся, значит надо довести до конца!
sergeiss
Цитата (qwer123 @ 31.05.2014 - 19:15)
Мне это очень нужно!

Что "это"? Понять, почему функция работает неправильно при неправильных параметрах? А мне вот не интересно это, например... Мне всегда было интереснее понять, какие параметры правильные и что я получаю при ПРАВИЛЬНЫХ параметрах.
Если кому-то интересно, пусть думают вместе с тобой об использовании неправильных параметров. Но не я.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
qwer123
Цитата
Что "это"? Понять, почему функция работает неправильно при неправильных параметрах? А мне вот не интересно это, например... Мне всегда было интереснее понять, какие параметры правильные и что я получаю при ПРАВИЛЬНЫХ параметрах.
Если кому-то интересно, пусть думают вместе с тобой об использовании неправильных параметров. Но не я.


Ясно, но все равно спасибо!
OleKh
Цитата (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
Цитата
В мануале, колбек функция ДОЛЖНА возвращать ЦЕЛОЕ (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


Спасибо, я качал исходники смотрел, ничего не понятно,но видимо, это единственный вариант, чтобы понять!
OleKh
В исходниках не то чтобы совсем не понятно, но так сразу чтоб прочитать и разобрать, не прочитав ни одной книжки про С, было бы наглостью по отношению к программистам )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.