Php 如何将给定数组相对于另一个数组排序,并将其视为数据元素的子字符串

Php 如何将给定数组相对于另一个数组排序,并将其视为数据元素的子字符串,php,arrays,sorting,Php,Arrays,Sorting,如何将给定数组分别排序到另一个数组?搜索未找到此案例的解决方案。简单地说,定义排序顺序的数组如下(示例): 我想使用$arrayorder定义的顺序对数组进行排序,如下所示: $data = array("a1", "za", "19", "18", "qz", "qc", "qd", "zc", "zb", "u", "z9"); 输出数组应为: $output = array ("z9", "za", "zb", "zc", "qc", "qd", "qz", "18", "19", "a

如何将给定数组分别排序到另一个数组?搜索未找到此案例的解决方案。简单地说,定义排序顺序的数组如下(示例):

我想使用
$arrayorder
定义的顺序对数组进行排序,如下所示:

$data = array("a1", "za", "19", "18", "qz", "qc", "qd", "zc", "zb", "u", "z9");
输出数组应为:

$output = array ("z9", "za", "zb", "zc", "qc", "qd", "qz", "18", "19", "a1", "u");
实际上,
$data
数组应该根据
$arrayorder
定义的顺序进行排序,例如:

"zGray", "zBlue"
结果顺序为:

"zBlue", "zGray"

使用
usort
函数可以定义自己的比较函数。虽然不优雅,但你可以做以下事情

usort ($data, function ($a, $b)
{
    $arrayorder = array("z", "q", "9", "1", "a", "u");
    $ea = array_search(substr($a,0,1), $arrayorder );
    $eb = array_search(substr($b,0,1), $arrayorder );
    if ($ea == $eb) {
        if ( $a == $b ) {
            return 0;
        }
        else {
            return ($a< $b) ? -1 : 1;
        }
    }
    return ($ea< $eb) ? -1 : 1;
});
usort($data,function($a,$b)
{
$arrayorder=数组(“z”、“q”、“9”、“1”、“a”、“u”);
$ea=数组搜索(substr($a,0,1),$arrayorder);
$eb=数组搜索(substr($b,0,1),$arrayorder);
如果($ea==$eb){
如果($a=$b){
返回0;
}
否则{
回报率($a<$b)?-1:1;
}
}
回报率($ea<$eb)?-1:1;
});
将所有可能的第一个字符都放在arrayorder中很重要,或者更改代码以将一些默认值设置为一个高数字,从而将它们推到排序顺序的末尾

usort ($data, function ($a, $b)
{
    $arrayorder = array("z", "q", "9", "1", "a", "u");
    $ea = array_search(substr($a,0,1), $arrayorder );
    $eb = array_search(substr($b,0,1), $arrayorder );
    if ($ea == $eb) {
        if ( $a == $b ) {
            return 0;
        }
        else {
            return ($a< $b) ? -1 : 1;
        }
    }
    return ($ea< $eb) ? -1 : 1;
});