2014-11-22 209 views
-1

我有一個數組$array排序關聯數組

$array => 
(
    ['name'] => (
       "Ronaldo","Ribery","Bale","Messi" 
       ), 
    ['rank'] => (
       2,4,1,3 
      ) 
) 

現在,我怎麼陣列DESC一起使用rank場與name 預期排序輸出 - >

$array => 
(
    ['name'] => (
       "Ribery","Messi","Ronaldo","Bale" 
       ), 
    ['rank'] => (
       4,3,2,1 
      ) 
) 

回答

2

一個有效的使用經常被誤解的array_multisort()

<?php 
$array = [ 
    'name' => ["Ronaldo","Ribery","Bale","Messi"], 
    'rank' => [2,4,1,3] 
]; 
array_multisort(
    $array['rank'], SORT_DESC, SORT_NUMERIC, 
    $array['name'], SORT_ASC, SORT_STRING 
); 
var_dump($array); 

array(2) { 
    'name' => 
    array(4) { 
    [0] => 
    string(6) "Ribery" 
    [1] => 
    string(5) "Messi" 
    [2] =>                                        
    string(7) "Ronaldo"                                    
    [3] =>                                        
    string(4) "Bale"                                     
    }                                         
    'rank' => 
    array(4) { 
    [0] => 
    int(4) 
    [1] => 
    int(3) 
    [2] => 
    int(2) 
    [3] => 
    int(1) 
    } 
} 
1

看看這個php article此外,如果你希望你的兩個數組有關係,比你能更好地把它寫這樣的:

array(
    array(
     name => 'Messi', 
     rank => 4, 
    ), 
    etc.. 
); 
0

爲什麼不改變你的數據結構能夠工作與對象?

class Player { 
    public $name; // would be better as private and add getters 
    public $rank; 

    public function __construct($name, $rank) { 
     $this->name = $name; 
     $this->rank = $rank; 
    } 
} 

然後填寫你的陣列(我不熟悉足球):

$players = [ // or array(...) if you are using older PHP 
    new Player('Foo', 3), 
    new Player('Bar', 1), 
    new Player('FooBar', 2) 
]; 

然後你可以使用常規的排序:

// or a function name, if using older PHP 
usort($players, function (Player $a, Player $b) { 
    if ($a->rank == $b->rank) { 
     return 0; 
    } 
    return ($a->rank < $b->rank) ? -1 : 1; 
});