php如何在不同数组中按键排序数据

php如何在不同数组中按键排序数据,php,arrays,sorting,Php,Arrays,Sorting,我有一个数组$data [0] => Array { [configuration_id] => 5542abf530830 [primary_language] => fr_MA ) [1] => Array ( [configuration_id] => 5542abf4c0721 [primary_language] => en_IL ) [

我有一个数组$data

[0] => Array
    {
        [configuration_id] => 5542abf530830
        [primary_language] => fr_MA       
    )

[1] => Array
    (
        [configuration_id] => 5542abf4c0721
        [primary_language] => en_IL
    )

[3] => Array
    (
        [configuration_id] => 5542abf3ec1f4
        [primary_language] => en_IL
    )

[4] => Array
    (
        [configuration_id] => 5542abf38933a
        [primary_language] => en_AE     
    )

[5] => Array
    (
        [configuration_id] => 5542abf2b5069 
        [primary_language] => uk_UA
    )

[6] => Array
    (
        [configuration_id] => 5542abf1df2c8
        [primary_language] => tr_TR
    )

[7] => Array
    (
        [configuration_id] => 5542abf114768
        [primary_language] => ru_RU
    )

[8] => Array
    (
        [configuration_id] => 5542abf03f401
        [primary_language] => pl_PL

    )

[9] => Array
    (
        [configuration_id] => 5542abef6be61
        [primary_language] => hu_HU
    )

[10] => Array
    (
        [configuration_id] => 5542abef080cb
        [primary_language] => hu_HU
    )

[11] => Array
    (
        [configuration_id] => 5542abee980a8
        [primary_language] => cs_CZ
    )


[12] => Array
    (
        [configuration_id] => 5542abedc5422
        [primary_language] => zh_TW
    )

[13] => Array
    (
        [configuration_id] => 5542abed60bad
        [primary_language] => zh_TW
    )

[14] => Array
    (
        [configuration_id] => 5542abecf12ac
        [primary_language] => zh_CN
    )

[15] => Array
    (
        [configuration_id] => 5542abec28ff1            
        [primary_language] => ko_KR
    }

[16] => Array
    (
        [configuration_id] => 5542abeb54eaf
        [primary_language] => sv_SE
    )

[17] => Array
    (
        [configuration_id] => 5542abe529770     
        [primary_language] => da_DK
    )

[18] => Array
    (
        [configuration_id] => 5542abe407af9
        [primary_language] => fr_FR
   }

[19] => Array
    (
        [configuration_id] => 5542abea828f7
        [primary_language] => pt_BR
    )

[20] => Array
    (
        [configuration_id] => 5542abdc37fb9
        [primary_language] => en_US
    )
另外,每种语言的其他数组属于以下哪一层组

$tier0_languages = array("en_US");
$tier1_languages = array("ja_JP", "de_DE", "fr_FR");
$tier2_languages = array("it_IT","es_ES","es_MX","nl_NL","pt_BR","da_DK","fi_FI","nb_NO","sv_SE");
$tier3_languages = array("ko_KR","zh_CN","zh_TW");
$tier4_languages = array("cs_CZ","ru_RU","tr_TR","pl_PL","hu_HU","uk_UA","fr_MA","en_AE","en_IL");

我想按每个语言组对$数据进行排序$首先是tier0_语言,然后是tier1_语言,依此类推。如何编写php代码来实现这一点?请告知。

我将首先将语言数组编译成一组正则表达式,如下所示

$expr1 = '('.implode('|', $tier0_languages).')'; 
所以最终你会得到这样的结果

(en_US)|(ja_JP|de_DE|fr_FR)...

但是如果所有语言都是有序的,那么使用匹配索引作为顺序(使用preg\u OFFSET\u CAPTURE)进行preg\u match和uksort就相对简单了。

我首先将语言数组编译成一组正则表达式,如下所示

$expr1 = '('.implode('|', $tier0_languages).')'; 
所以最终你会得到这样的结果

(en_US)|(ja_JP|de_DE|fr_FR)...

但是在所有语言都按顺序排列的情况下,使用匹配索引作为顺序(使用preg\u OFFSET\u CAPTURE)进行preg\u匹配和uksort是相对简单的。

您可以简单地合并您的
$tier(int)\u语言
并使用
uasort
对其进行排序

$tier0_languages = array("en_US");
$tier1_languages = array("ja_JP", "de_DE", "fr_FR");
$tier2_languages = array("it_IT","es_ES","es_MX","nl_NL","pt_BR","da_DK","fi_FI","nb_NO","sv_SE");
$tier3_languages = array("ko_KR","zh_CN","zh_TW");
$tier4_languages = array("cs_CZ","ru_RU","tr_TR","pl_PL","hu_HU","uk_UA","fr_MA","en_AE","en_IL");

$tier = array_merge($tier0_languages,$tier1_languages,$tier2_languages,$tier3_languages,$tier4_languages);

uasort($arr, function ($a,$b) use ($tier){
    foreach($tier as $value){
        if($value == $a['primary_language']){
            return 0;
            break;
        }
        if($value == $b['primary_language']){
            return 1;
            break;
        }
    }
});

print_r($arr);

您可以简单地合并您的
$tier(int)\u语言
,并使用
uasort
对其进行排序

$tier0_languages = array("en_US");
$tier1_languages = array("ja_JP", "de_DE", "fr_FR");
$tier2_languages = array("it_IT","es_ES","es_MX","nl_NL","pt_BR","da_DK","fi_FI","nb_NO","sv_SE");
$tier3_languages = array("ko_KR","zh_CN","zh_TW");
$tier4_languages = array("cs_CZ","ru_RU","tr_TR","pl_PL","hu_HU","uk_UA","fr_MA","en_AE","en_IL");

$tier = array_merge($tier0_languages,$tier1_languages,$tier2_languages,$tier3_languages,$tier4_languages);

uasort($arr, function ($a,$b) use ($tier){
    foreach($tier as $value){
        if($value == $a['primary_language']){
            return 0;
            break;
        }
        if($value == $b['primary_language']){
            return 1;
            break;
        }
    }
});

print_r($arr);

我能看到的唯一方法是循环层,然后循环数据以获取轮胎中的项目-效率不高-您能将数据排序到更接近源的位置吗?uksort();也许?我会将这些语言转换成一组简单的正则表达式,然后在键盘上用uksort测试它们。最好的方法是合并所有
$tier
数组,然后使用
uasort()
我能看到的唯一方法是循环层,然后循环数据以获取轮胎中的项目-效率不高-您能将数据排序到更接近源的位置吗?uksort();也许?我会将这些语言转换成一组简单的正则表达式,然后用uksort键测试它们。最好的方法是合并所有
$tier
数组,然后使用
uasort()
非常感谢。这就是我想要的。很好。(仅供参考:你可以接受或投票给一个真正对你有帮助的答案…)非常感谢。这就是我想要的。它工作得很好。(仅供参考:你可以接受或投票给一个真正对你有帮助的答案…)