我不完全理解PHP如何分配,所以我不知道我是否犯了错误,或者这是一个错误。
usort()这里间歇性地将数组的头部或尾部清零。
class foo
{
public $idx;
public $data;
}
function compare_foos ($a, $b)
{
if ($a->data == $b->data)
return 0;
elseif ($a->data < $b->data)
return -1;
else
return 1;
}
$mylist = Array ();
for ($i=0; $i < 10; ++$i)
{
$mylist[$i] = new foo ();
$mylist[$i]->idx = $i;
$mylist[$i]->data = rand() % 20;
}
print_r ($mylist);
usort ($mylist, compare_foos);
echo "<HR>";
print_r ($mylist);
答案 0 :(得分:2)
Callbacks与usort使用的一样,可以用3种不同的方式指定:
包含函数名称的字符串:
usort($mylist, 'compare_foos');
实际功能:
usort($mylist, create_function(/*...*/));
// php >= 5.3 only:
usort($mylist, function ($a, $b) {
/* ... */
});
访问对象方法的数组:
usort($mylist, array($myobject, 'mymethod'));
使用回调方式无效,php返回错误:
PHP Notice: Use of undefined constant compare_foos - assumed 'compare_foos' in /home/lepidosteus/test.php on line 28
要查看它,请记住使用error_reporting()在开发计算机上启用的每个错误(但将它们隐藏在生产服务器上)进行编码:
error_reporting(E_ALL); // display all errors including notices
error_reporting(0); // hide all errors
顺便说一下,如果您想将对象用作简单商店,则无需创建可以使用的专用类stdClass():
$mylist[$i] = new stdClass();
$mylist[$i]->idx = $i;
$mylist[$i]->data = rand() % 20;
此外,在调试时可以使用var_dump()而不是print_r来获取有关每个变量类型的详细信息,可以帮助您快速找出问题是否存在。