第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用PHP的uasort排序時保留鍵順序(穩(wěn)定排序)

使用PHP的uasort排序時保留鍵順序(穩(wěn)定排序)

這個問題實(shí)際上是從SO上的另一個問題得到啟發(fā)的,我想對其進(jìn)行擴(kuò)展。在PHP中有一個關(guān)聯(lián)數(shù)組可以對它的值進(jìn)行排序,但是使用一個(或多個)PHP內(nèi)置的排序函數(shù),這些值等于保留原始鍵順序的值嗎?這是我用來測試可能的解決方案的腳本(尚未找到):<?phpheader('Content-type: text/plain');for($i=0;$i<10;$i++){    $arr['key-'.$i] = rand(1,5)*10;}uasort($arr, function($a, $b){    // sort condition may go here //    // Tried: return ($a == $b)?1:($a - $b); //    // Tried: return $a >= $b; //});print_r($arr);?>陷阱:由于鍵是按原始數(shù)組排序的,因此請不要試圖建議按鍵進(jìn)行任何排序以恢復(fù)到原始順序。我將它們排序?yàn)槭纠?,以便更直觀地查看輸出中的順序。
查看完整描述

3 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個贊

array_multisort派上用場,只需將有序范圍用作第二個數(shù)組($order只是臨時的,它用于按其原始順序?qū)Φ谝粋€數(shù)組的等效項(xiàng)進(jìn)行排序):

$a = [

  "key-0" => 5,

  "key-99" => 3,

  "key-2" => 3,

  "key-3" => 7

];


$order = range(1,count($a));

array_multisort($a, SORT_ASC, $order, SORT_ASC);


var_dump($a);

輸出量


array(4) {

  ["key-99"]=>

  int(3)

  ["key-2"]=>

  int(3)

  ["key-0"]=>

  int(5)

  ["key-3"]=>

  int(7)

}

我使用帶有未排序鍵的測試數(shù)據(jù)來證明它可以正常工作。盡管如此,這是測試腳本的輸出:


Array

(

    [key-1] => 10

    [key-4] => 10

    [key-5] => 20

    [key-8] => 20

    [key-6] => 30

    [key-9] => 30

    [key-2] => 40

    [key-0] => 50

    [key-3] => 50

    [key-7] => 50

)

缺點(diǎn)

它僅適用于預(yù)定義的比較,不能使用自己的比較功能??赡艿闹担ǖ牡诙€參數(shù)array_multisort())為:


排序類型標(biāo)志:


SORT_ASC -升序排序。

SORT_DESC -遞減排序。

SORT_REGULAR -通常比較商品(不要更改類型)

SORT_NUMERIC -數(shù)字比較項(xiàng)目

SORT_STRING -比較項(xiàng)目作為字符串

SORT_LOCALE_STRING-根據(jù)當(dāng)前語言環(huán)境將項(xiàng)目作為字符串進(jìn)行比較。它使用語言環(huán)境,可以使用 setlocale()

SORT_NATURAL -使用“自然順序”將項(xiàng)目作為字符串進(jìn)行比較 natsort()

SORT_FLAG_CASE-可以與SORT_STRING或組合(按位或)以SORT_NATURAL區(qū)分大小寫的字符串


查看完整回答
反對 回復(fù) 2019-11-04
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個贊

為了完整起見,您還應(yīng)該查看Schwartzian變換:


// decorate step

$key = 0;

foreach ($arr as &$item) {

        $item = array($item, $key++); // add array index as secondary sort key

}


// sort step

asort($arr); // sort it


// undecorate step

foreach ($arr as &$item) {

    $item = $item[0]; // remove decoration from previous step

}

PHP的默認(rèn)排序算法正常工作與陣列,因?yàn)檫@樣:


array(1, 0) < array(2, 0); // true

array(1, 1) < array(1, 2); // true

如果你想使用自己的分類標(biāo)準(zhǔn)可以使用uasort(),以及:


// each parameter is an array with two elements

// [0] - the original item

// [1] - the array key

function mysort($a, $b)

{

    if ($a[0] != $b[0]) {

        return $a[0] < $b[0] ? -1 : 1;

    } else {

        // $a[0] == $b[0], sort on key

        return $a[1] < $b[1] ? -1 : 1; // ASC

    }

}


查看完整回答
反對 回復(fù) 2019-11-04
  • 3 回答
  • 0 關(guān)注
  • 966 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號