Здравствуйте уважаемые форумчане, очень нуждаюсь в вашей помощи! Я пишу аналог ф-и array_diff_uassoc(пишу, чтобы лучше понимать и и уметь кодить), в общем написал и при глубоком тестировании выяснил, что моя ф-я дает сбой! При ситуации $q = function (){}; $array1 = array(1,2,3,4); $array2 = array(1,2,3); print_r(array_diff_uassoc($array1, $array2, $q)); print_r(my_array_diff_uassoc($array1, $array2, $q)); Получаются такие выводы Array ( [0] => 1 [1] => 2 [3] => 4 ) и соответственно моя ф-я выдает Array ( [3] => 4 ) Еще интересней получается когда когда пихаешь смешанные массивы,где и объекты и некоторые параметры массивов тоже массивы содержат, а так же нулл и параметры булева типа! Очень прошу, помогите разобраться, заранее всем спасибо за помощь!
а в чем тут разбираться? ваша функция работает неправильно. ищите где. код у вас перед глазами. у нас его нет
Я наверное неправильно сформулировал вопрос! Сформулирую конкретней! помогите понять, как так получается? $q = function (){}; $array1 = array(1,2,3,4); $array2 = array(1,2,3); print_r(array_diff_uassoc($array1, $array2, $q)); выдаёт Array ( [0] => 1 [1] => 2 [3] => 4 ) а на мой взгляд, по логике вещей должна выдавать такое Array ( [3] => 4 ) как так получается?
опишите свою логику вещей. интересно послушать , учитывая что вы передаете калбек функцию которая ничего не возвращает. а должна возвращать целое число.
qwer123, мне тоже не понятно, чего ты ожидаешь, если передаёшь пустую пользовательскую функцию сравнения.
array_diff_uassoc — Вычисляет расхождение массивов с дополнительной проверкой индекса, осуществляемой при помощи callback-функции(выдержка из php.net документации)! т е получается,если значение с таким же ключем присутствует в другом(других массивах), то оно исключается! А тут получается такое $q = function (){}; $array1 = array(1,2,3,4); $array2 = array(1,2,3); print_r(array_diff_uassoc($array1, $array2, $q)); по логике должно выдавать (тк это единственное значение, которого нет во втором массиве) Array ( [3] => 4 ) а выдает Array ( [0] => 1 [1] => 2 [3] => 4 ) Почему так? почему 1, 2 остались, если они есть во втором массиве, а тройка исключилась?
точный ответ нужно смотреть в исходниках функции. а вообще, почему вы ждете адекватной работы, если передаете неадекватную callback функцию?
qwer123, вот передай функцию, которая сортирует, сразу всё заработает, вернёт Array([3] => 4) Код (PHP): $q = function ($a, $b){ return ($a>$b)?1:($a<$b)?-1:0; }; У тебя функция пустая, что равнозначно тому, что она возвращает 0 Код (Text): $q = function (){return 0;};
Вполне адекватная ф-я, тк выборка не меняется, покрутите пример, попробуйте разные массивы по составлять,и вы сами убедитесь, что систематичность присутствует, я только логики не пойму, как так сравнивать,чтобы получить такие ответы??? Да это я знаю, а как получить такие значения??? Array ( [0] => 1 [1] => 2 [3] => 4 ) как проводить сравнение, чтобы получить такие значения(с тем учетом, что в нормальном режиме, она тоже должна работать)???
Если знаешь, что такие значения получаются, когда функция сравнения возвращает 0, то чего спрашиваешь?
Непонятки возникают оттого, что внутренние механизмы функции пытаются как-то оптимизировать число сравнений. Очевидные варианты callback работают как ожидается, а выяснять почему не работают бессмысленные варианты может только очень неленивый человек. IMHO.
Качал,ничего не понял, вы не могли бы мне помочь??? Насчет лени не согласен с вами, мне наоборот кажется, ибо как научиться программировать,если не пытаться делать то, что ты еще не умееешь или не знаешь как работает!
я не говорю, что любознательность это плохо. просто учиться лучше на задачах, имеющих практический смысл. тогда твои собственные потребности будут вести тебя как проводник и ты всё запомнишь. у человека память работает на ассоциациях, на связях цель <-> средство. ты нашел весьма диковинную функцию. вот скажи, для чего ты хочешь её применить?
этот вопрос лучше задать в форуме по c++. там больше специалистов, которые в тонкостях смогут раскрыть алгоритм работы и особености реализации этой функции.
Я так учусь программировать, и понимать работу яп, возможно вариант не самый лучший, но если задача заставляет долго сидеть и думать, то я считаю,что это хороший метод! спасибо, но что-то мне подсказывает, что я их не пойму, тк с пхп не очень пока что получается даже!