簡體   English   中英

PHP array_multisort

[英]PHP array_multisort

我在排序 arrays 時遇到了一些困難。 我嘗試了 SORT_DESC、SORT_NUMERIC 方法,但它從來沒有用過。 即使我將 array_multisort 放在代碼中的其他任何位置。

所以這就是我的 arrays 的樣子:

Array
(
    [0] => Array
        (
            [0] => 0.13
            [1] => Ships From
            [2] => Russia
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.11
            [1] => Color
            [2] => Green
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.1
            [1] => Size
            [2] => M
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.12
            [1] => Material
            [2] => Flex
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.13
            [1] => Ships From
            [2] => China
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.11
            [1] => Color
            [2] => Red
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.1
            [1] => Size
            [2] => L
        )

)
Array
(
    [0] => Array
        (
            [0] => 0.12
            [1] => Material
            [2] => Cotton
        )

) 

如您所見,我有雙 [0],並按該值對它們進行排序。 所以我的代碼如下所示:

foreach($value['options'] as $key => $option)
            {
                $sort = array();


                $attribude= $this->attribute($option['key']);
               
                $attribute_value= $this->attribude($getAttr->id, $option['value']);

                $collection = array_push($sort, array($attribude->default_order, $attribude->label, $attribute_value->value));

                print_r($sort);
            }

我試圖添加array_multisort($sort, SORT_ASC); 基本上我可以在任何地方,但它從來沒有工作過。 任何想法如何解決這個問題?

我建議,如果可以的話,在嘗試排序之前重組你的數組。 下面是一個按數字 2 索引排序的重組數組的示例。 您可以通過更改此$row[2]來調整索引,如$row[0]以按索引零的浮點值排序。

$array = [
    array(0.13,'Ships From','C'),
    array(0.12,'Ships From','D'),
    array(0.10,'Ships From','B'),
    array(0.14,'Ships From','A'),
];

$a = array();
$b = array();
foreach ($array as $key => $row) {
    $a[$key] = $row[2];
}
array_multisort($a, SORT_ASC, $array);

echo '<pre>';
print_r($array);
echo '</pre>';
Array
(
    [0] => Array
        (
            [0] => 0.14
            [1] => Ships From
            [2] => A
        )

    [1] => Array
        (
            [0] => 0.1
            [1] => Ships From
            [2] => B
        )

    [2] => Array
        (
            [0] => 0.13
            [1] => Ships From
            [2] => C
        )

    [3] => Array
        (
            [0] => 0.12
            [1] => Ships From
            [2] => D
        )

)

內聯解決方案:

usort($array, function($a, $b) { return $a[0] <=> $b[0]; });

旗艦運營商需要PHP 7+,否則手動比較。 對於反向 (DESC) 訂單交換 $a 與 $b。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM