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

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

PHP:使用閉包語法“use()”的 usort

PHP:使用閉包語法“use()”的 usort

PHP
慕沐林林 2022-12-11 10:16:59
編輯:我重寫了我的帖子,以便更清楚地提供一個具有實際價值的獨立案例(不再有 Ajax)。我有 2 個完全相同的數(shù)組,只是其中一個具有相同的值但已清理(html、特殊字符等)。我想評估針對“arrayClean”的排序,但根據(jù)該評估對“arrayOriginal”進(jìn)行排序(而不是 arrayClean)。所以,這就是我所擁有的:<?php$arrayOriginal  = array(    array('id' => '100','surface' => '<span>300</span>','whatever' => 'qSDqsd'),    array('id' => '5465','surface' => '100 ch','whatever' => 'ghjkghjk'),    array('id' => '40489','surface' => '<b>1000</b>','whatever' => 'fgsdfg'));$arrayClean = array(    array('id' => '100','surface' => '300','whatever' => 'qSDqsd'),    array('id' => '5465','surface' => '100','whatever' => 'ghjkghjk'),    array('id' => '40489','surface' => '1000','whatever' => 'fgsdfg'));usort($arrayOriginal, function($a, $b) use (&$arrayClean) {    return $a['surface'] < $b['surface'];});echo '<pre>'; print_r($arrayOriginal); echo '</pre>';?>這是我得到的(這是錯誤的,因為排序似乎沒有考慮 arrayClean):Array([0] => Array    (        [id] => 100        [surface] => <span>300</span>        [whatever] => qSDqsd    )[1] => Array    (        [id] => 40489        [surface] => <b>1000</b>        [pwhatever] => fgsdfg    )[2] => Array    (        [id] => 5465        [surface] => 100 ch        [whatever] => ghjkghjk    ))但如果我單獨使用 arrayClean,只是為了檢查排序腳本是否正確:usort($arrayClean, function($a, $b) {    return $a['surface'] < $b['surface'];});echo '<pre>'; print_r($arrayClean); echo '</pre>';那么結(jié)果就是我所期望的:Array([0] => Array    (        [id] => 40489        [surface] => 1000        [whatever] => fgsdfg    )[1] => Array    (        [id] => 100        [surface] => 300        [whatever] => qSDqsd    )[2] => Array    (        [id] => 5465        [surface] => 100        [whatever] => ghjkghjk    ))因此,評估 arrayClean 但相應(yīng)地對 arrayOriginal 進(jìn)行排序似乎不起作用。它只評估和排序 arrayOriginal。我用錯了“use()”嗎?我應(yīng)該用別的東西嗎?
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗 獲得超9個贊

假設(shè)兩個數(shù)組都按公共因素(即 )排序id。


uksort($arrayOriginal, function($a, $b) use ($arrayClean) {

    return $arrayClean[$a]['surface'] < $arrayClean[$b]['surface'];

});

再次強(qiáng)調(diào),要使其工作,兩個數(shù)組必須包含相同順序的元素。在您的情況下,兩個數(shù)組的元素必須按以下順序(按 ID)排列:100、5465、40489


但我寧愿做類似的事情:


usort($arrayOriginal, function($a, $b) {

    return yourSurfaceCleanMethod($arrayOriginal['surface']) < yourSurfaceCleanMethod($arrayOriginal['surface']);

});

當(dāng)然,一切都取決于您的需要,但是如果您$arrayClean僅將其用作對原始數(shù)組進(jìn)行排序的參考并且您yourSurfaceCleanMethod手邊有它,我肯定會執(zhí)行上述操作。


查看完整回答
反對 回復(fù) 2022-12-11
?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗 獲得超8個贊

我認(rèn)為如果您的 arrayOriginal 應(yīng)該根據(jù) HTML 標(biāo)記的內(nèi)容進(jìn)行排序,則不需要 arrayClean。

strip_tags()可用于排序函數(shù)中。

usort($arrayOriginal, function($a, $b) { 
   return strip_tags($b['surface']) <=> strip_tags($a['surface']);
});

注意:使用飛船操作符<=>得到正確的比較結(jié)果1、0和-1。


查看完整回答
反對 回復(fù) 2022-12-11
?
皈依舞

TA貢獻(xiàn)1851條經(jīng)驗 獲得超3個贊

我禮貌地接受了 Nemoden 的回答,因為從技術(shù)上講,它根據(jù)其范圍(所提供的測試用例)回答了問題。但這是我發(fā)現(xiàn)最適合我的解決方案:


$arrayOriginal  = array(

    array('id' => '100','surface' => '<span>300</span>','whatever' => 'qSDqsd'),

    array('id' => '5465','surface' => '100 ch','whatever' => 'ghjkghjk'),

    array('id' => '40489','surface' => '<b>1000</b>','whatever' => 'fgsdfg')

);


$arrayClean = array(

    array('id' => '100','surface' => '300','whatever' => 'qSDqsd'),

    array('id' => '5465','surface' => '100','whatever' => 'ghjkghjk'),

    array('id' => '40489','surface' => '1000','whatever' => 'fgsdfg')

);


$surface = array_column($arrayClean, 'Surface');


array_multisort($surface, SORT_DESC, SORT_REGULAR, $arrayOriginal);

然后我得到這個輸出,這正是我想要的:


Array

(

    [0] => Array

        (

            [id] => 40489

            [surface] => <b>1000</b>

            [whatever] => fgsdfg

        )


    [1] => Array

        (

            [id] => 100

            [surface] => <span>300</span>

            [whatever] => qSDqsd

        )


    [2] => Array

        (

            [id] => 5465

            [surface] => 100 ch

            [whatever] => ghjkghjk

        )


)

Nemoden 的回答非常有幫助,但無論出于何種原因,它給了我這個:


Array

(

    [1] => Array

        (

            [id] => 40489

            [surface] => <b>1000</b>

            [whatever] => fgsdfg

        )


    [0] => Array

        (

            [id] => 100

            [surface] => <span>300</span>

            [whatever] => qSDqsd

        )


    [2] => Array

        (

            [id] => 5465

            [surface] => 100 ch

            [whatever] => ghjkghjk

        )


)   

子數(shù)組以正確的順序打印,但子數(shù)組索引未更改。因此,當(dāng)導(dǎo)出到 javascript“arrayOriginal”時,它會回到其初始排序,因為子數(shù)組將再次根據(jù)它們的索引重新排序。至少,我是這樣經(jīng)歷的。


不管怎樣,現(xiàn)在問題已經(jīng)解決了,我在這里得到的答案非常有幫助。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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