PHP - Ds Map::sort() 函式



PHP 的Ds\Map::sort()函式用於預設情況下按升序對對映的元素進行就地排序。“就地”表示它修改原始對映,而不會建立或儲存任何新記憶體。

此函式接受一個可選引數,您可以使用該引數指定基於返回值的條件來對對映中的元素進行排序。

以下是比較器函式的一些重要要點:

  • 如果第一個元素大於第二個元素,則返回-1

  • 如果第一個元素小於第二個元素,則返回1

  • 如果第一個元素等於第二個元素,則返回0

語法

以下是 PHP Ds\Map::sort()函式的語法:

public Ds\Map::sort(callable $comparator = ?): void

引數

以下是此函式的引數:

  • comparator(可選) - 一個可選的比較器函式,比較元素並返回一個整數值。

以下是comparator函式的語法:

callback(mixed $a, mixed $b): int

返回值

此函式不返回值。

示例 1

如果省略可選的comparator函式,則此函式會按升序對元素進行排序。

以下程式演示了 PHP Ds\Map::sort()函式的用法:

<?php 
   $map = new \Ds\Map([20, 10, 30]); 
   echo "The map elements before sorting: \n";
   print_r($map);
   echo "The map elements after sorting: \n";
   #using sort() function
   $map->sort(); 
   print_r($map); 
?>

輸出

上述程式產生以下輸出:

The map elements before sorting:
Ds\Map Object
(
    [0] => Ds\Pair Object
        (
            [key] => 0
            [value] => 20
        )

    [1] => Ds\Pair Object
        (
            [key] => 1
            [value] => 10
        )

    [2] => Ds\Pair Object
        (
            [key] => 2
            [value] => 30
        )

)
The map elements after sorting:
Ds\Map Object
(
    [0] => Ds\Pair Object
        (
            [key] => 1
            [value] => 10
        )

    [1] => Ds\Pair Object
        (
            [key] => 0
            [value] => 20
        )

    [2] => Ds\Pair Object
        (
            [key] => 2
            [value] => 30
        )

)

示例 2

如果我們將比較器函式作為引數傳遞給PHP Ds\Map::sort()函式,則元素將根據指定的比較器函式條件進行排序:

<?php 
   $map = new \Ds\Map([5, 1, 4, 3, 2]);
   echo "The map elements before sorting: \n";
   foreach($map as $key=>$value){
	   echo "[".$key."] = ".$value."\n";
   }
   $func = function($first, $second) { 
      if($first > $second) 
         return -1; 
      else if($first < $second) 
         return 1;
      else 
         return 0;
   }; 
   $map->sort($func); 
   echo "The map elements before sorting: \n";
   foreach($map as $key=>$value){
	   echo "[".$key."] = ".$value."\n";
   } 
?>

輸出

執行上述程式後,將顯示以下輸出:

The map elements before sorting:
[0] = 5
[1] = 1
[2] = 4
[3] = 3
[4] = 2
The map elements before sorting:
[0] = 5
[2] = 4
[3] = 3
[4] = 2
[1] = 1

示例 3

讓我們嘗試在不使用comparator函式的情況下對包含字元值 (['a', 'i', 'u', 'o', 'e']) 的對映的元素進行排序。

<?php 
   $map = new \Ds\Map(['a', 'i', 'u', 'o', 'e']);
   echo "The map elements before sorting: \n";
   foreach($map as $key=>$value){
	   echo "[".$key."] = ".$value."\n";
   } 
   $map->sort(); 
   echo "The map elements before sorting: \n";
   foreach($map as $key=>$value){
	   echo "[".$key."] = ".$value."\n";
   }
?>

輸出

執行上述程式後,將顯示以下輸出:

The map elements before sorting:
[0] = a
[1] = i
[2] = u
[3] = o
[4] = e
The map elements before sorting:
[0] = a
[4] = e
[1] = i
[3] = o
[2] = u
php_function_reference.htm
廣告