2015-04-23 1 views
0

Я пытаюсь переписать сценарий со-разработчиков и наткнулся на этот маленький драгоценный камень, я за жизнь меня не могу даже понять, что он делает, а тем более как его реорганизовать. Кто-нибудь объяснит мне, что он делает, и если моя интерпретация его кода верна?Закрытие с запутанным usort

исходный код:

$f = "return (${$v[0]}['{$k}'] - ${$v[1]}['{$k}']);"; 
usort($results, create_function('$a,$b',$f)); 

моя попытка и переписать его в качестве крышки:

$f = function ($k,$v) 
{ 
    return ($v[0][$k] - $v[1][$k]); 
}; 

usort($results, $f($k, $v)); 

EDIT

Для ясности, $k случайная строка, и $v является массив либо ['a','b'], либо массив ['b','a']

Я действительно потерял свою попытку, может быть, это было так?

usort($results, function() USE ($k,$v) 
{ 
    return ($v[0][$k] - $v[1][$k]); 
}); 
+0

'usort ($ результатов, $ F ('$ а, $ Ь')); '--- что вы здесь делаете: вы вызываете функцию и передаете ей строковый аргумент (в то время как он ожидает, что переданы два аргумента). Не помещайте его в переменную, но создавайте вместо него место, и все будет в порядке. – zerkms

+0

«Может, это было?» --- Может быть, так оно и есть. В чем проблема? – zerkms

+0

Я пытаюсь изменить то, что он сделал, на что-то более читаемое, так как я не понимаю, что это была за попытка, например, если он пытался взвешивать функцию. Его трудно объяснить, если вы не понимаете попытки – ehime

ответ

0

Вы просто должны это сделать

$f = function ($k,$v) 
{ 
    return ($v[0][$k] - $v[1][$k]); 
}; 

usort($results, $f); 

Подробнее о Closures и usort в php.net