php - PHP 按字母顺序排列数组,但特定项目应首先出现
问题描述
我正在使用Wordpress 商店定位器插件。
我有一个带有商店的数组,我想按字母顺序对结果进行排序,但是当我输出数组时,有两个“特殊商店”应该是第一个结果。
我已经在一个基本示例中得到了我想要的
$stores = array("A", "B", "C", "D");
usort($stores, function($a, $b) {
if ($b == "C") {
return 1;
}
});
foreach ($stores as $store) {
echo $store;
}
但我不知道如何使用插件来实现这一点。根据插件的文档,这是您对商店进行排序的方式。
add_filter( 'wpsl_store_data', 'custom_result_sort' );
function custom_result_sort( $store_meta ) {
$custom_sort = array();
foreach ( $store_meta as $key => $row ) {
$custom_sort[$key] = $row['store'];
}
array_multisort( $custom_sort, SORT_ASC, SORT_REGULAR, $store_meta );
return $store_meta;
}
它使用array_multisort
,我不知道我是否可以使用 usort 以某种方式使两个特殊商店首先出现。任何想法如何做到这一点?
解决方案
您可以尝试使用此解决方案。只需在商店名称前添加前缀,然后使用array_multisort()
withSORT_ASC
和进行排序SORT_STRING
:
function custom_result_sort( $store_meta ) {
$custom_sort = array();
foreach ( $store_meta as $key => $row ) {
$store = $row['store'];
if (($store == 'SpecialStore1') || ($store == 'SpecialStore2')) {
$prefix = '0_';
} else {
$prefix = '1_';
}
$custom_sort[$key] = $prefix.$store;
}
array_multisort( $custom_sort, SORT_ASC, SORT_STRING, $store_meta );
return $store_meta;
}
推荐阅读
- sql-server - 在 rdlc 报告 vb.net 中传递日期范围
- php - PHP cURL - 带有数据返回的 API Auth Token
- python - LSTM 分类的时间序列数据准备
- javascript - Lambda 上的 Puppeteer Node.js 脚本
- vba - Outlook 自定义表单共享
- laravel - 如何制作可重新排列的对象并为每个用户显示它们
- lua - 我在创作游戏时经常在 Roblox Studio 中听到“鲜肉”这个词
- azure-devops - 在 Azure DevOps 中,当部署到生产环境的构建引用时,孤立的 git 提交/对象是否会保留?
- linux - 是否有可能留在使用 execl 的进程打开的 shell 中,就在名为 _exit 的进程之前?
- visual-studio-code - In VSCode snippets how do you use transform to lowercase just the first letter of a value?