Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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 在使用usort()对数组进行排序时,是否可以设置两个起始值?_Php_Sorting - Fatal编程技术网

Php 在使用usort()对数组进行排序时,是否可以设置两个起始值?

Php 在使用usort()对数组进行排序时,是否可以设置两个起始值?,php,sorting,Php,Sorting,我想使用usort()对$currency进行排序。但是我希望$排在第一位,然后¥排在第二位,然后其余的将按字母顺序排序。是否可以使用usort()?在您的情况下,您可以将sort与一些array.*函数一起使用: $currency[0] = '$'; $currency[1] = 'WON'; $currency[2] = 'A$'; $currency[3] = '€'; $currency[4] = '¥'; 更新: 使用usort的替代解决方案 $prime = array('$',

我想使用
usort()
$currency
进行排序。但是我希望
$
排在第一位,然后
¥
排在第二位,然后其余的将按字母顺序排序。是否可以使用
usort()

在您的情况下,您可以将
sort
与一些
array.*
函数一起使用:

$currency[0] = '$';
$currency[1] = 'WON';
$currency[2] = 'A$';
$currency[3] = '€';
$currency[4] = '¥';
更新:

使用usort的替代解决方案

$prime = array('$', '¥');
$matches = array_intersect($currency, $prime);
$currency = array_diff($currency, $prime);
sort($currency);
$currency = array_merge($matches, $currency);
$prime=array(“$”,“¥”);
usort($currency,function($a,$b)use($prime){
$i1=数组搜索($a,$prime);
$i2=数组搜索($b,$prime);
如果($i1!==false | |$i2!==false)
返回$i2===false | |$i1!==false&&$i1<$i2?-1:1;
返回$a<$b-1:($a==$b-0:1);
});

无论
$
¥
位置在哪里?要么向左,要么向右?@RahilWazir我想要的是,当升序时,$排在第一位,然后,$排在第二位,然后是字母顺序。当降序“$”排在最后一位时,那么“¥”是倒数第二位的。您认为可以为usort()创建一个自定义函数来解决我的问题吗?@Alex Coroza必须使用
usort
?不一定,但我需要usort(),因为实际上我有关联数组,并且我使用usort对其他字段进行排序。
$i2
$i1
将是未定义的变量,
数组搜索
条件失败。@hindmost我尝试了更新的解决方案,但出现了错误,就像Rahil Wazir说的那样
$prime = array('$', '¥');
usort($currency, function ($a, $b) use ($prime) {
    $i1 = array_search($a, $prime);
    $i2 = array_search($b, $prime);
    if ($i1 !== false || $i2 !== false)
        return $i2 === false || $i1 !== false && $i1 < $i2? -1 : 1;
    return $a < $b? -1 : ($a == $b? 0 : 1);
});