qwer123
22.05.2014 - 23:41
Здравствуйте уважаемые форумчане, очень нуждаюсь в вашей помощи! Я пишу аналог ф-и 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
)
Еще интересней получается когда когда пихаешь смешанные массивы,где и объекты и некоторые параметры массивов тоже массивы содержат, а так же нулл и параметры булева типа!
Очень прошу, помогите разобраться, заранее всем спасибо за помощь!
sergeiss
23.05.2014 - 00:05
Ты что именно предлагаешь: погадать, как устроены внутри обе указанные тобой функции и понять, что у тебя написано неверно? ОК. Ставлю 100 против 1, что ошибка где-то между 1 и последней строками твоего кода, считая от начала функции my_array_diff_uassoc()
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Invis1ble
23.05.2014 - 00:28
Цитата |
Ты что именно предлагаешь: погадать, как устроены внутри обе указанные тобой функции и понять, что у тебя написано неверно? |
я еще дополню, что assoc подразумевает ассоциативный массив и разница вычисляется по ключам, а у тебя обычные списки.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
qwer123
23.05.2014 - 03:00
Суть не в исходнике, я его специально не вылаживал, тк хочу понять логику этой ф-и!
$q = function (){};
$array1 = array('a'=>1,'b'=>2,'c'=>3,'d'=>4);
$array2 = array('a'=>1,'b'=>2,'c'=>3);
$result = array_diff_uassoc($array1, $array2, $q);
Можете проверить так, ничего не поменяется
Array
(
[a] => 1
[b] => 2
[d] => 4
)
У меня сравнение происходит так,
if ($arrays[count($arrays) - 1]($keyArray[$j],$key) === 0 and (string)$arrays[$i][$key] === (string)$value)
уверен, что скорее всего неправильно сравниваю, но как эта ф-я сравнивает, что у нее получается такой результат, я не могу понять!
Игорь_Vasinsky
23.05.2014 - 06:39
=== - сравнение типов
== - сравнение значений.
в сам смысл кода не вникал.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
paul85
23.05.2014 - 07:01
Цитата (Игорь_Vasinsky @ 23.05.2014 - 06:39) |
=== - сравнение типов |
Сравнение значений И типов.
qwer123
23.05.2014 - 11:12
Я наверное неправильно сформулировал вопрос! Сформулирую конкретней!
помогите понять, как так получается?
$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
)
как так получается?
sergeiss
23.05.2014 - 12:16
Цитата (qwer123 @ 23.05.2014 - 11:12) |
как так получается? |
Кроме массивов, тут еще участвует твоя кол-бэк функция. Значит, она некорректный результат дает. Скорее всего, прямо противоположный
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)
Но функция у тебя сугубо секретная, ты не хочешь показать ее полный код, чтобы его можно было оценить... А "экстрасенсов нету".
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
23.05.2014 - 12:23
Цитата |
Кроме массивов, тут еще участвует твоя кол-бэк функция. Значит, она некорректный результат дает. Скорее всего, прямо противоположный smile.gif Но функция у тебя сугубо секретная, ты не хочешь показать ее полный код, чтобы его можно было оценить... А "экстрасенсов нету". |
Ребят,ну дело не в моей ф-и,я хочу понять как сравнивает оригинал, что у него получаются такие результаты!
знаю, что в калбек ф-и идут только ключи!
$q = function (){var_dump(func_get_args());};
$array1 = array('a'=>1,'b'=>2,'c'=>3,'d'=>4);
$array2 = array('a'=>1,'b'=>2,'c'=>3);
$result = array_diff_uassoc($array1, $array2, $q);
если запустите данный пример, то вы сами убедитесь!
function key_compare_func2($a, $b)
{var_dump($a.' === '.$b);
if ($a === $b) {
echo 0;
return 0;
} elseif($a > $b) {
echo 1;
return 1;
} else {
echo -1;
return -1;
}
}
$array1 = array('a'=>1,'b'=>2,'c'=>3,'d'=>4);
$array2 = array('a'=>1,'b'=>2,'c'=>3);
$result = array_diff_uassoc($array1, $array2, $q);
если запустите этот пример, то вы убедитесь, что все значения которые опускает эта ф-я возвращает ноль!
sergeiss
23.05.2014 - 12:52
Цитата (qwer123 @ 23.05.2014 - 12:23) |
function key_compare_func2($a, $b) |
Так ГДЕ и КАК ты используешь эту функцию? Вообще, имя этой функции должно быть передано 3-м параметром в array_diff_uassoc(). Ты этого НЕ ДЕЛАЕШь. Так какое отношение имеет указанная функция к твоему примеру?
Цитата (qwer123 @ 23.05.2014 - 12:23) |
Ребят,ну дело не в моей ф-и,я хочу понять как сравнивает оригинал, что у него получаются такие результаты! |
Еще раз: "оригинал" использует твою кол-бэк функцию, которую ты указал наконец-то. Но не показал, где и как ты ее используешь.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
23.05.2014 - 13:05
Цитата |
Так ГДЕ и КАК ты используешь эту функцию? Вообще, имя этой функции должно быть передано 3-м параметром в array_diff_uassoc(). Ты этого НЕ ДЕЛАЕШь. Так какое отношение имеет указанная функция к твоему примеру?
Цитата (qwer123 @ 23.05.2014 - 12:23) Ребят,ну дело не в моей ф-и,я хочу понять как сравнивает оригинал, что у него получаются такие результаты!
Еще раз: "оригинал" использует твою кол-бэк функцию, которую ты указал наконец-то. Но не показал, где и как ты ее используешь. |
Я пишу аналог этой ф-и(таким способом пытаюсь поднять уровень кодинга), по стандартным примерам, у меня нормально работает, все четко, но если калбек ф-ю поставить такую
$q = function (){};
то у меня расходятся результаты с оригиналом, а следовательно, получается моя ф-я не правильно работает, чтобы ее исправить мне надо понять логику сравнения array_diff_uassoc
Я просто понять не могу, почему такие результаты??? где логика??? Как так сравнение надо вести??
$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
)
Это единственный мой вопрос, как так получается?? как она сравнивает, что получаются такие результаты?
sergeiss
23.05.2014 - 13:20
3-й параметр в функции array_diff_uassoc() - это пользовательская кол-бэк функция, сравнивающая 2 значения. ГДЕ, блин, это сравнение у тебя делается??? Вот здесь, что ли?
Цитата (qwer123 @ 23.05.2014 - 13:05) |
$q = function (){}; |
Я вот читаю и не понимаю - это "тонкий троллинг" с твоей стороны или нежелание попытаться понять написанное как в хэлпе, так и мной?
Вот "твой" же код, в слегка доработанном виде. Хотя я уже сильно сомневаюсь, что это твой код. Похоже, что ты его где-то нашел, но не понимаешь, что он вообще делает.
$array1 = array(1,2,3,4);
$array2 = array(1,2,3);
echo '<pre>'.print_r(array_diff_uassoc($array1, $array2, 'key_compare_func2'), 1).'</pre>';
function key_compare_func2($a, $b)
{
if ($a === $b) {
return 0;
} elseif($a > $b) {
return 1;
} else {
return -1;
}
}
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
23.05.2014 - 13:59
Цитата |
3-й параметр в функции array_diff_uassoc() - это пользовательская кол-бэк функция, сравнивающая 2 значения. ГДЕ, блин, это сравнение у тебя делается??? Вот здесь, что ли? Цитата (qwer123 @ 23.05.2014 - 13:05) $q = function (){};
Я вот читаю и не понимаю - это "тонкий троллинг" с твоей стороны или нежелание попытаться понять написанное как в хэлпе, так и мной?
Вот "твой" же код, в слегка доработанном виде. Хотя я уже сильно сомневаюсь, что это твой код. Похоже, что ты его где-то нашел, но не понимаешь, что он вообще делает.
$array1 = array(1,2,3,4); $array2 = array(1,2,3); echo '<pre>'.print_r(array_diff_uassoc($array1, $array2, 'key_compare_func2'), 1).'</pre>';
function key_compare_func2($a, $b) {//var_dump($a.' === '.$b); if ($a === $b) { // echo 0; return 0; } elseif($a > $b) { // echo 1; return 1; } else { //echo -1; return -1; } } |
Это пример из мана php.net! Не пойму при чем тут тролинг, если мне важно понять, почему, при ситуации
$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_diff_uassoc — Вычисляет расхождение массивов с дополнительной проверкой индекса, осуществляемой при помощи callback-функции |
Источник
http://www.php.net/manual/ru/function.array-diff-uassoc.phpЯ просто не могу уловить логику сравнения, это для меня важно, как оно так сравнивает, что при нормальной калбек ф-и нормальные результаты, а при пустой, такие результаты???
sergeiss
23.05.2014 - 14:08
Цитата (qwer123 @ 23.05.2014 - 13:59) |
Это пример из мана php.net! Не пойму при чем тут тролинг, если мне важно понять, почему, при ситуации
$q = function (){}; |
Пример из мана php.net, говоришь? И где ты там видишь эту переменную $q?
![rolleyes.gif](http://phpforum.su/html/emoticons/rolleyes.gif)
Может я слепой?
![laugh.gif](http://phpforum.su/html/emoticons/laugh.gif)
Или браузер глупый, не может сделать поиск по $q?
PS.
...взял попкорн, устроился удобнее у экрана. Больше в этой теме у меня нет желания отвечать. Потому что ТС либо не хочет понимать то, что ему говорят (и что написано в мануалах), либо просто откровенно троллит.
Понаблюдаю "в-пол-глаза" за развитием событий в теме....
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
qwer123
23.05.2014 - 14:11
Цитата |
Пример из мана php.net, говоришь? И где ты там видишь эту переменную $q? rolleyes.gif Может я слепой? laugh.gif Или браузер глупый, не может сделать поиск по $q? |
Это я уже сам смоделировал ситуацию!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.