Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP实现的最奇怪的函数_Php_Arrays_Usort - Fatal编程技术网

用PHP实现的最奇怪的函数

用PHP实现的最奇怪的函数,php,arrays,usort,Php,Arrays,Usort,好吧,我正在尝试一些非常简单的方法 这是: usort($newarr, "cmp"); function cmp($a, $b) { return 0; } 问题很简单:它不会通过发出此警告消息对数组进行排序 Warning: usort() expects parameter 2 to be a valid callback, function 'cmp' not found or invalid function name 我在这里读到了这个答案 但这对我来说没有任何意义,我没有一

好吧,我正在尝试一些非常简单的方法

这是:

usort($newarr, "cmp");

function cmp($a, $b)
{ return 0; }
问题很简单:它不会通过发出此警告消息对数组进行排序

Warning: usort() expects parameter 2 to be a valid callback, function 'cmp' not found or invalid function name

我在这里读到了这个答案

但这对我来说没有任何意义,我没有一个像答案1中解释的那样的类(我甚至不需要任何类,我尝试了$this,this,而不是“myclass”,但它根本不起作用):

使用(或
create_函数
)创建一个匿名函数,如
cmp
,然后将其传递给
usort

例如:

usort($newarr, function($a, $b) {
    return 0;
});

更改脚本流,当您尝试对数组进行排序时,
cmp
还不存在。因此,这应该是可行的:

function cmp($a, $b)
{ return 0; }

usort($newarr, "cmp");

从您发布的问题信息中,无法明确说明为什么它不适合您

代码通常是有效的,它是完全正确的():


我想不起来这是否是问题所在,但尝试将函数包含在usort上方而不是下方。对
usort()
的调用是否与
cmp
在同一范围内?如果是,是否在类中定义了
cmp
?在代码中调用
usort()
之前,请尝试放置排序函数定义。@enrico:您的代码应该工作正常。你使用的是哪一个PHP版本,你发布的正是你所拥有的代码?事实上,反过来也是如此,那么为什么要改变它呢?真的吗?怎么会这样?PHP有一个水晶球来确定后面定义的函数是否存在?:)我不敢相信,我改变了顺序,它不再给我一个错误了_o@J0HN-不需要水晶球。PHP解析文件,然后执行它。它不是逐行解析和执行的。@PaulDixon,也许我是从Parralel universe写的,也许我没有得到什么,也许我弄错了,但PHP总是抱怨未定义的函数。你能在一些文档页面上指出我错了吗?比
create\u function
@hakre更好使用它取决于PHP版本。如果在共享主机上,它可能没有PHP5.3,但这也是一个选项。
function cmp($a, $b)
{ return 0; }

usort($newarr, "cmp");
<?php
$newarr = array();

if (!function_exists('cmp')) echo "cmp() not defined yet.\n";
usort($newarr, "cmp");

function cmp($a, $b)
{ return 0; }