2016-01-12 2 views
1

Этот пример зависит от двух ключей/значений вместо одного, в отличие от многих других примеров, которые я видел в Stack-overflow. Помимо сортировки массива ниже на primary ключ, я также хотел бы отсортировать его по age, чтобы я смог достичь ОЖИДАЕМЫЙ РЕЗУЛЬТАТ ниже. Как мне изменить КОД ниже, чтобы достичь этого? ТЕКУЩИЙ РЕЗУЛЬТАТ имеет A-6-6 ключ неуместен, потому что мой код еще не обрабатывает его.Сортировка многомерного массива двумя разными ключами или значением

исходного массива

$myarray = [ 
    'Z-9-0' => [ 
     'primary' => true, 
     'age' => 55 
    ], 
    'C-7-1' => [ 
     'primary' => false, 
     'age' => 60 
    ], 
    'K-1-9' => [ 
     'primary' => true, 
     'age' => 60 
    ], 
    'C-2-1' => [ 
     'primary' => false, 
     'age' => 40 
    ], 
    'F-6-6' => [ 
     'primary' => true, 
     'age' => 60 
    ], 
    'A-6-6' => [ 
     'primary' => true, 
     'age' => 30 
    ] 
]; 

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ

(
    [F-6-6] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [K-1-9] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [Z-9-0] => Array 
     (
      [primary] => 1 
      [age] => 55 
     ) 
    [A-6-6] => Array 
     (
      [primary] => 1 
      [age] => 30 
     ) 
    [C-7-1] => Array 
     (
      [primary] => 
      [age] => 60 
     ) 
    [C-2-1] => Array 
     (
      [primary] => 
      [age] => 40 
     ) 
) 

КОД

uasort($myarray, function($a, $b) { 
    return strcmp($b['primary'], $a['primary']); 
}); 

print_r($org); 

ТЕКУЩИЙ РЕЗУЛЬТАТ

Как вы можете видеть, A-6-6 не в нужном месте по сравнению с ожидаемым результатом выше. Таким образом, чем больше age, тем выше оно должно появиться.

(
    [A-6-6] => Array 
     (
      [primary] => 1 
      [age] => 30 
     ) 
    [F-6-6] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [K-1-9] => Array 
     (
      [primary] => 1 
      [age] => 60 
     ) 
    [Z-9-0] => Array 
     (
      [primary] => 1 
      [age] => 55 
     ) 
    [C-7-1] => Array 
     (
      [primary] => 
      [age] => 60 
     ) 
    [C-2-1] => Array 
     (
      [primary] => 
      [age] => 40 
     ) 
) 
+0

Я не уверен, является ли это соответствует вашему вопросу; однако вы можете быстро взглянуть на это: http://php.net/manual/en/function.uasort.php#114535 –

ответ

1

Я думаю, вы можете добавить дополнительную проверку ключа «возраст» в uasort, когда значения для ключа «первичного» равны.

uasort($myarray, function($a, $b) { 
    if ($b['primary'] === $a['primary']) { 
     return $b['age'] > $a['age']; 
    } 
    return strcmp($b['primary'], $a['primary']); 
}); 

Demo

+0

Отлично. Спасибо. – BentCoder

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