I have an array $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
)
Also, other array to each language belongs to which tier group as follows,
$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");
I would like to sort $data by each language group. $tier0_language first, $tier1_language next and so on. How can I write php code to do that? Please advise.
I would first compile the language arrays into a set of regular expressions such as this
$expr1 = '('.implode('|', $tier0_languages).')';
So in the end you have something like this
(en_US)|(ja_JP|de_DE|fr_FR)...
but with all of the languages in order, then it is relatively trivial to do preg_match, and uksort, using the match index as the order ( using PREG_OFFSET_CAPTURE ).
You can simply merge your $tier(int)_languages
and sort it using uasort
as
$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);