簡體   English   中英

php-如何對除一個數組之外的所有元素進行排序

[英]php - how to sort all elements of array except one

我正在尋找一種優雅的方式來對存儲在一個數組中的三個值中的兩個進行排序。 第三個可以忽略不計,但我不想放開它(因此不設置取消選項)。

想象這樣的數組:

$r = Array("tree_type" => 1, "tree_height" = 5, "tree_age" = 2);

如果tree_height較大,那么它是年齡,我想用tree_age交換樹的高度,所以樹的高度總是小於年齡。

現在,我將其排序為:

if ( $r['tree_height'] > $r['tree_age'] ) {
   $tmp = $r['tree_height'];
   $r['tree_height'] = $r['tree_age'];
   $r['tree_age'] = $tmp;
}

它工作得很好,但我正在尋找更優雅的方式。 最好的解決方案是這樣的:

fname($r, $r['tree_height'], $r['tree_age']);

如果fname大於第三個參數,則fname總是將第二個參數與第三個參數交換,否則將無效。

任何意見,將不勝感激。 卡爾雷格。

回答:

沒有條件的最短答案是:

$tmp = Array($r['tree_height'], $r['tree_age'])
sort($tmp);

您可以將代碼封裝到一個函數中:

function swap(&$arr){       //NOTE SIGN & meaning passing by reference.
  if ($arr['tree_height'] > $arr['tree_age']){
    $cache_age = $arr['tree_age'] ;

    $arr['tree_age'] = $arr['tree_height'] ;
    $arr['tree_height'] = $cache_age ;
  }
}


$r = array("tree_type" => 1, "tree_height" => 5, "tree_age" => 2);
swap($r);

var_dump($r);

另一個優雅的解決方案:(基於是否有PHP函數用於交換兩個變量的值?

function swap(&$arr){       //NOTE SIGN & meaning passing by reference.
  if ($arr['tree_height'] > $arr['tree_age']){
    list($arr['tree_height'], $arr['tree_age']) = array($arr['tree_age'], $arr['tree_height']);
  }
}

這可能有效(未經測試):

function fname(&$a, &$b) {

    if ($a <= $b)
        return;

    $t = $a;
    $a = $b;
    $b = $t;
}

fname($r['tree_height'], $r['tree_age']);

編輯:也許您想要這樣的事情?

function fname(&$array, $name1, $name2) {

    if ($array[$name1] <= $array[$name2])
        return;

    $t = $array[$name1];
    $array[$name1] = $array[$name2];
    $array[$name2] = $t;
}

fname($r, 'tree_height', 'tree_age');

暫無
暫無

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

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