簡體   English   中英

如何從數組中從php中最高值到最低值排序的鍵中獲取鍵?

[英]How to get the keys from an array sorted from highest to lowest value in php?

我有一個數組例如

$pointsTotal = array('70','23','555','8789','1245');

我需要從此數組中將密鑰從高到低排序。 這意味着此示例中的輸出應為

array('4','5','3','1','2')

請幫忙。

我希望這段代碼可以解決您的問題:

<?php    
$pointsTotal = array(70,23,555,8789,1245);
arsort($pointsTotal);
$newArrForKey = array();
foreach($pointsTotal AS $key => $val){
    $newArrForKey[] = $key + 1;
}
print_r($newArrForKey);

上面代碼的輸出是:

Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 1 [4] => 2 )

使數組從1到5,並與主數組同步對其進行排序。 請記住,主數組也會被排序。 進行復制以保存它(如果需要)

$k= range(1, count($pointsTotal));
array_multisort( $pointsTotal, SORT_DESC, $k);

print_r($k);

結果

[ 4, 5, 3, 1,2 ]

嘗試這個 ..

 $output= ksort($pointsTotal);

下面的代碼應該可以解決您的問題。

<?php

$pointsTotal = array('70','23','555','8789','1245');

// Copy pointsTotal, as rsort will modify it

$rsortedPointsTotal = $pointsTotal;

rsort($rsortedPointsTotal);

$pointsIndices = array();

$currentIndex = 0;

foreach($rsortedPointsTotal as $point) {
  $pointsIndices[$currentIndex] = array_search($point, $pointsTotal) + 1;
  $currentIndex++;
}

echo "\n";

foreach ($pointsIndices as $index) {
  echo $index."\n";
}

?>

腳步:-

  1. 首先,我們復制原始數組
  2. 然后,我們使用rsort()對復制的數組進行反向排序。
  3. 對於此反向排序數組的每個索引,我們在原始數組中找到其索引。
  4. 塔達阿! 做完了

威廉·弗朗西斯·戈麥斯(William Francis Gomes)的答案是正確的,但使用循環並使用密集數組可能會提高效率,此外,在課堂和教學中,這會殺死您。

這是一個無循環的單行純C解決方案,在任何情況下都可以使用:

arsort($pointsTotal);
$result = array_keys(array_flip(array_map(function($el){ return $el + 1; }, array_flip($pointsTotal))));

結果

Array ( [0] => 4 [1] => 5 [2] => 3 [3] => 1 [4] => 2 )

如果您想保留原始密鑰:

arsort($pointsTotal);
$result = array_values(array_flip($pointsTotal));

結果:

Array ( [0] => 3 [1] => 4 [2] => 2 [3] => 0 [4] => 1 )

暫無
暫無

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

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