首页 > 解决方案 > 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 以某种方式使两个特殊商店首先出现。任何想法如何做到这一点?

标签: phparrayssorting

解决方案


您可以尝试使用此解决方案。只需在商店名称前添加前缀,然后使用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;
}

推荐阅读