2015-08-28 4 views
-2

Я хочу сортировать массив по значению P, если два P являются одинаковыми, а затем сортируют по PD, если два PD одинаковы, а затем сортируют по PF так же, как PA.
Как я достигаю этого?Сортировка Многомерный массив с несколькими значениями в PHP

У меня есть многомерный массив в PHP Как и

PHP:

 
$abc = array(
    array('id' => 1,'name' => 'abc','overall' => array('MP' => '2','W'=> '2','L' => '0','D'=> '0','PF' => '2904','PA' => '1932','PD' => '972','P' => '6')), 
    array('id' => 1,'name' => 'abc','overall' => array('MP' => '2','W'=> '1','L' => '1','D'=> '0','PF' => '2320','PA' => '1974','PD' => '346','P' => '3')), 
    array('id' => 1,'name' => 'abc','overall' => array('MP' => '2','W'=> '1','L' => '1','D'=> '0','PF' => '1620','PA' => '1824','PD' => '-204','P' => '3')), 
    array('id' => 1,'name' => 'abc','overall' => array('MP' => '2','W'=> '0','L' => '2','D'=> '0','PF' => '2200','PA' => '2300','PD' => '-100','P' => '0')) 
); 

HTML:

 
Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 0 
        [L] => 2 
        [D] => 0 
        [PF] => 2200 
        [PA] => 2300 
        [PD] => -100 
        [P] => 0 
       ) 

     ) 

    [1] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 1 
        [L] => 1 
        [D] => 0 
        [PF] => 2320 
        [PA] => 1974 
        [PD] => 346 
        [P] => 3 
       ) 

     ) 

    [2] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 1 
        [L] => 1 
        [D] => 0 
        [PF] => 1620 
        [PA] => 1824 
        [PD] => -204 
        [P] => 3 
       ) 

     ) 

    [3] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 2 
        [L] => 0 
        [D] => 0 
        [PF] => 2904 
        [PA] => 1932 
        [PD] => 972 
        [P] => 6 
       ) 

     ) 

) 

Хочет похож, как это.

 
Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 2 
        [L] => 0 
        [D] => 0 
        [PF] => 2904 
        [PA] => 1932 
        [PD] => 972 
        [P] => 6 
       ) 

     ) 

    [1] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 1 
        [L] => 1 
        [D] => 0 
        [PF] => 2320 
        [PA] => 1974 
        [PD] => 346 
        [P] => 3 
       ) 

     ) 

    [2] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 1 
        [L] => 1 
        [D] => 0 
        [PF] => 1620 
        [PA] => 1824 
        [PD] => -204 
        [P] => 3 
       ) 

     ) 

    [3] => Array 
     (
      [id] => 1 
      [name] => abc 
      [overall] => Array 
       (
        [MP] => 2 
        [W] => 0 
        [L] => 2 
        [D] => 0 
        [PF] => 2200 
        [PA] => 2300 
        [PD] => -100 
        [P] => 0 
       ) 

     ) 

) 

Я пробовал вот так.

 

    $memberArray1 = usort($memberArray, function($a, $b) { 
     return $b['overall']['P'] - $a['overall']['P']; 
    }); 
    $memberArray1 = usort($memberArray, function($a, $b) { 
     return $b['overall']['PD'] - $a['overall']['PD']; 
    }); 

Но вопрос, когда я сортировать как P, то он работает, но после того, когда я вроде как PD, то он вроде по PD не нравится P.

+0

Опубликовать ваши попытки. Что вы пробовали до сих пор? –

ответ

0

Вы можете использовать uasort вместе с rsort в

uasort($abc,function($a,$b){ 
    $c = $a['P'] - $b['P']; 
    $c .= $a['PD'] - $b['PD']; 
    $c .= $a['PF'] - $b['PF']; 
    $c .= $a['PA'] - $b['PA']; 
    return $c; 
}); 
array_reverse($abc); 
print_r($abc); 

Demo

+0

yup it works !!!! Спасибо –

+0

@NarendraSisodia Ваша функция может генерировать неопределенные предупреждения индексов. Также, если вы отменяете «$ a» и «$ b» в вычитание, нет необходимости в 'rsort'. – Ugur

+2

Выполнение 'rsort' после' uasort' должно просто аннулировать 'uasort'. Если вы хотите изменить направление, просто на 'array_reverse', или лучше, обратное' $ a' и '$ b' внутри функции сравнения. – deceze

Смежные вопросы