亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

PHP array_multisort 未按預期對雙多維數組進行排序

PHP array_multisort 未按預期對雙多維數組進行排序

PHP
HUWWW 2023-07-08 21:58:39
這是我的代碼。<?php$data['test1'][0] = array('total' => 67, 'edition' => 2, 'pkg_version' => "2.5.0" );$data['test1'][1] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.1.0" );$data['test1'][2] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.3.0" );$data['test2'][0] = array('total' => 86, 'edition' => 1, 'pkg_version' => "1.5.0");$data['test2'][1] = array('total' => 85, 'edition' => 6, 'pkg_version' => "0.53.0");$data['test2'][2] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.3");$data['test2'][3] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.2");$data['test3'][0] = array('total' => 60, 'edition' => 6, 'pkg_version' => "0.3");$data['test3'][1] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.1.1");$data['test3'][2] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.25");foreach ($data as $row) {    foreach ($row as $k){        foreach ($k as $key => $value){                ${$key}[]  = $value;         }     }  }array_multisort($pkg_version, SORT_DESC, $data);echo "<pre>";print_r($data);echo "</pre>";?>我正在嘗試使用 array_multisort 函數對多維數組進行排序我想對要訂購的每個元素的 pkg_version 進行排序退回的訂單不符合預期。不確定,我誤解了如何array_multisort 有效嗎?或者我的代碼是錯誤的。你們能幫我嗎?我試著解決這個問題很久了。這是一個相當復雜的維度數組。這是運行上面代碼后的結果。Array(    [test1] => Array        (            [0] => Array                (                    [total] => 67                    [edition] => 2                    [pkg_version] => 2.5.0                )            [1] => Array                (                    [toal] => 67                    [edition] => 2                    [pkg_version] => 0.1.0                )            [2] => Array                (                    [total] => 67                    [edition] => 2                    [pkg_version] => 0.3.0                )        )    [test2] => Array        (            [0] => Array                (                    [total] => 86                    [edition] => 1                    [pkg_version] => 1.5.0                ))
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

您可以循環數組并使用usort()

<?php


$data['test1'][0] = array('total' => 67, 'edition' => 2, 'pkg_version' => "2.5.0" );

$data['test1'][1] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.1.0" );

$data['test1'][2] = array('total' => 67, 'edition' => 2, 'pkg_version' => "0.3.0" );

$data['test2'][0] = array('total' => 86, 'edition' => 1, 'pkg_version' => "1.5.0");

$data['test2'][1] = array('total' => 85, 'edition' => 6, 'pkg_version' => "0.53.0");

$data['test2'][2] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.3");

$data['test2'][3] = array('total' => 98, 'edition' => 2, 'pkg_version' => "0.2");

$data['test3'][0] = array('total' => 60, 'edition' => 6, 'pkg_version' => "0.3");

$data['test3'][1] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.1.1");

$data['test3'][2] = array('total' => 60, 'edition' => 7, 'pkg_version' => "0.25");


// use a reference to the sub array

//? ? ? ? ? ? ? ? |

//? ? ? ? ? ? ? ? |

//? ? ? ? ? ? ? ? v

foreach ($data as &$row)

{

? ? usort($row, function($a, $b)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? // make a desc sort by comparing $b against $a instead of $a against $b

? ? ? ? ? ? ? ? ? ? return strcmp($b['pkg_version'], $a['pkg_version']);

? ? ? ? ? ? ? ? });

}


var_dump($data);

這輸出:


array(3) {

? ["test1"]=>

? array(3) {

? ? [0]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(67)

? ? ? ["edition"]=>

? ? ? int(2)

? ? ? ["pkg_version"]=>

? ? ? string(5) "2.5.0"

? ? }

? ? [1]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(67)

? ? ? ["edition"]=>

? ? ? int(2)

? ? ? ["pkg_version"]=>

? ? ? string(5) "0.3.0"

? ? }

? ? [2]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(67)

? ? ? ["edition"]=>

? ? ? int(2)

? ? ? ["pkg_version"]=>

? ? ? string(5) "0.1.0"

? ? }

? }

? ["test2"]=>

? array(4) {

? ? [0]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(86)

? ? ? ["edition"]=>

? ? ? int(1)

? ? ? ["pkg_version"]=>

? ? ? string(5) "1.5.0"

? ? }

? ? [1]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(85)

? ? ? ["edition"]=>

? ? ? int(6)

? ? ? ["pkg_version"]=>

? ? ? string(6) "0.53.0"

? ? }

? ? [2]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(98)

? ? ? ["edition"]=>

? ? ? int(2)

? ? ? ["pkg_version"]=>

? ? ? string(3) "0.3"

? ? }

? ? [3]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(98)

? ? ? ["edition"]=>

? ? ? int(2)

? ? ? ["pkg_version"]=>

? ? ? string(3) "0.2"

? ? }

? }

? ["test3"]=>

? &array(3) {

? ? [0]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(60)

? ? ? ["edition"]=>

? ? ? int(6)

? ? ? ["pkg_version"]=>

? ? ? string(3) "0.3"

? ? }

? ? [1]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(60)

? ? ? ["edition"]=>

? ? ? int(7)

? ? ? ["pkg_version"]=>

? ? ? string(4) "0.25"

? ? }

? ? [2]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(60)

? ? ? ["edition"]=>

? ? ? int(7)

? ? ? ["pkg_version"]=>

? ? ? string(5) "0.1.1"

? ? }

? }

}

請注意,在最后一個數組中, version0.3高于 version 0.25。由于這是您預期輸出中的順序,因此我將其保留為原樣,但如果不是,您可以使用 , 代替strcmp(),version_compare()這將為 提供以下輸出$data['test3']:


? ["test3"]=>

? &array(3) {

? ? [0]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(60)

? ? ? ["edition"]=>

? ? ? int(7)

? ? ? ["pkg_version"]=>

? ? ? string(4) "0.25"

? ? }

? ? [1]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(60)

? ? ? ["edition"]=>

? ? ? int(6)

? ? ? ["pkg_version"]=>

? ? ? string(3) "0.3"

? ? }

? ? [2]=>

? ? array(3) {

? ? ? ["total"]=>

? ? ? int(60)

? ? ? ["edition"]=>

? ? ? int(7)

? ? ? ["pkg_version"]=>

? ? ? string(5) "0.1.1"

? ? }

? }

}


查看完整回答
反對 回復 2023-07-08
  • 1 回答
  • 0 關注
  • 176 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號