Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 按键值对数组排序,然后获得数组中的5个最高值和最低值_Php_Arrays_Sorting_Multidimensional Array - Fatal编程技术网

Php 按键值对数组排序,然后获得数组中的5个最高值和最低值

Php 按键值对数组排序,然后获得数组中的5个最高值和最低值,php,arrays,sorting,multidimensional-array,Php,Arrays,Sorting,Multidimensional Array,我有一个名为“PlayerArray”的数组,看起来像这样: Array ( [0] => Array ( [name] => Joe [holders] => 0 ) [1] => Array ( [name] => Bob [holders] => 100 ) [2] => Array ( [name] => Jake [holders] => 100 ) [3] => Array ( [name]

我有一个名为“PlayerArray”的数组,看起来像这样:

Array (
    [0] => Array ( [name] => Joe [holders] => 0 )
    [1] => Array ( [name] => Bob [holders] => 100 )
    [2] => Array ( [name] => Jake [holders] => 100 )
    [3] => Array ( [name] => Mike [holders] => 100 )
    [4] => Array ( [name] => Tim [holders] => -0.0145 )
    [5] => Array ( [name] => Frank[holders] => 100 ) 
    [6] => Array ( [name] => Scott [holders] => 0.0583 ) 
    [7] => Array ( [name] => Doug[holders] => 0.1308 ) 
    [8] => Array ( [name] => Tommy [holders] => 0.2516 ) 
    [9] => Array ( [name] => Eric [holders] => 100 ) 
)
我有一个按“holders”值对数组排序的函数:

我正在尝试按“holder”值对数组进行排序:

最后,我尝试在新排序的数组中获取5个最高和5个最低的“holder”值:

$first_5_players = array_slice($playersArray, 0, 5, true);
$last_5_players = array_slice($playersArray, -5);

但是,排序工作不正常。到期值未按所需顺序显示。如何使分拣正常工作?谢谢大家!

实际上,您没有在
compareHolders()
中比较这两个值,因为您没有声明
$aPpoints
$bPoints

这应该起作用:

function compareHolders($a, $b) {

    $aPoints = $a['holders'];
    $bPoints = $b['holders'];

    return strcmp($aPoints, $bPoints);

}
或者,您也可以返回:

return strcmp($a['holders'], $b['holders']);

然后您可以去掉strcmp(),因为您没有比较字符串。

您实际上没有比较
compareHolders()
中的两个值,因为您没有声明
$aPpoints
$bPoints

这应该起作用:

function compareHolders($a, $b) {

    $aPoints = $a['holders'];
    $bPoints = $b['holders'];

    return strcmp($aPoints, $bPoints);

}
或者,您也可以返回:

return strcmp($a['holders'], $b['holders']);

然后您可以去掉strcmp(),因为您没有比较字符串。

您的排序函数
比较持有者
不正确<代码>$aPoints和
$bPoints
未定义。由于
holders
键的值是数字,因此可以使用比较运算符。尝试执行以下操作:

function compareHolders($a, $b) {
    if ($a['holders'] == $b['holders']) {
        // return 0 if equal
        return 0;
    }
    return ($a['holders'] > $b['holders']) ? -1 : 1;
}

您的排序功能
比较器
不正确<代码>$aPoints
$bPoints
未定义。由于
holders
键的值是数字,因此可以使用比较运算符。尝试执行以下操作:

function compareHolders($a, $b) {
    if ($a['holders'] == $b['holders']) {
        // return 0 if equal
        return 0;
    }
    return ($a['holders'] > $b['holders']) ? -1 : 1;
}

这是对浮点进行排序的正确方法,使用字符串比较是非常错误的。这是对浮点进行排序的正确方法,使用字符串比较是非常错误的