PHP Сортировать массив в алфавитном порядке, но конкретные элементы должны появляться в первую очередь - PullRequest
0 голосов
/ 03 сентября 2018

Я использую плагин 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, чтобы два специальных магазина появились первыми. Есть идеи как это сделать?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете попробовать это решение. Просто добавьте префикс перед именем магазина, а затем сортируйте, используя array_multisort() с SORT_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;
}
0 голосов
/ 03 сентября 2018
$stores = array("A", "B", "C", "D");
asort($stores);
foreach ($stores as $key => $val) {
    echo "$key = $val\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...