Sıralama PHP

4 Cevap php

Ben giriş başına birden vales olan bir ilişkisel dizi sıralamak için çalışıyorum.

Örneğin

[0] => stdClass Object ( [type] => node [sid] => 158 [score] => 0.059600525242489 )
[1] => stdClass Object ( [type] => node [sid] => 247 [score] => 0.059600525242489 )

I (en yüksek puan ilk endeks olan) 'puan' olanlar istesinler

Bunu nasıl yaparım?

4 Cevap

PHP 5.3 varsa, bu biraz daha dinamik ve oldukça basit bir şekilde yapmak için kapakları kullanabilirsiniz:

function sortby(&$array, $key)
{
  usort($array, function($a, $b) {
    return ($a[$key] - $b[$key]);
  });
}

Ayrıca da dizeleri sıralamak planlıyorsanız hem tj111 ve bana önerdiği gibi, sıralama işlevinde eksi kullanarak, korkunç kıracak unutmayın. Bu durumda, Gumbo yaklaşımı fail-güvenli bir yoldur.

Örnek kod buraya yapıştırılır. Bu URL'yi kontrol edin: link text

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

Bu örnekte, biz hacmi azalan baskı artan tarafından sipariş olacaktır.

Biz satır bir dizi var, ama array_multisort () sütun bir dizi gerektirir, bu yüzden biz sıralamayı yapmadan sonra, sütunları elde etmek için aşağıdaki kodu kullanabilirsiniz.

// Obtain a list of columns
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

Veri kümesi şimdi sıralanır ve bu gibi görünecektir:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7