2016-07-19 7 views
-5
Array ([0] => Array ([1] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [2] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [3] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [4] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [5] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [6] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [7] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [8] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [9] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [10] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [11] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>) 
          [12] => Array ([EmpId] => STU100 [EmpName] => XXXXXX [percentage] => [max_point] => [opt_point] =>)) 
      [1] => Array ([1] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [2] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [3] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [4] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [5] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [6] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [7] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] =>90 [max_point] => [opt_point] =>) 
          [8] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [9] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [10] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [11] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [12] => Array ([EmpId] => STU101 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
      [2] => Array ([1] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [2] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [3] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [4] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [5] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [6] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [7] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] =>100 [max_point] => [opt_point] =>) 
          [8] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [9] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [10] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [11] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>) 
          [12] => Array ([EmpId] => STU102 [EmpName] => YYYYY [percentage] => [max_point] => [opt_point] =>))..... 

Мне нужен массив, отсортированный на основе [в процентах], например: STU102 был первым, STU101 был вторым, а STU100 был третьим на основе этих способов, мне нужно получить результат, может ли кто-нибудь помочь меня. Я пытался, Когда я использую это означает,PHP Сортировка массива внутри массива

function cmp($a, $b) { 
    return $b[7]["percentage"] - $a[7]["percentage"]; 
} 
usort($per_details1, "cmp"); 

он был отсортирован. Но я даю $ b [7] ["percent"] - $ a [7] ["percent"] 7-й индекс напрямую.

+1

можете ли вы отформатировать код? – RomanPerekhrest

+0

Вы можете исправить свое правописание, я не понимаю? это «sort by Percentage»? – Ivan

+0

@Babu, чтобы сохранить интервал в коде, выделите текст и нажмите кнопку кода над текстовым редактором. Он выглядит как скобки: '{}' – BeetleJuice

ответ

0

Вы действительно должны отформатировать свой код при его публикации.

Вы можете использовать функцию Usort PHP, чтобы выполнить то, что вам нужно. См. accepted answer here.

function cmp($a, $b) { 
    return $a["mid"] - $b["mid"]; 
} 
usort($arr, "cmp"); 

Кроме того, в то время как мы будем рады помочь здесь на SO, вы должны сделать некоторые из ваших собственных исследований в вашей проблеме, а также.

+0

Функция cmp ($ a, $ b) { return $ a ["mid"] - $ b ["mid"]; } usort ($ arr, "cmp"); Я уже использовал это, но не получаю результат, мой массив мне нравится массив внутри массива ... – Babu

+0

Можете ли вы ответить на мой вопрос. – Babu

1

Использование usort в PHP вместе с arraywalk

function sort($a, $b) { 
    if ($a['percentage'] == $b['percentage']) return 0; 
    return ($a['percentage'] > $b['percentage']) ? 1 : -1; 
} 

function sort(&$value) { 
    usort($value, 'sort'); 
} 

array_walk($array, 'sort'); 
+0

Возможно, вы захотите изменить название своей функции 'sort' на что-то еще, например' mySort', потому что 'sort' встроенная функция, и этот код вызовет ошибку ..... ;-) – Poiz

+0

Как это выглядит по полю 'percent' в массиве? – Barmar

+0

Я использую этот код, мой дорогой друг, но не получаю точного результата. – Babu

1

Loop над вашим массивом и использовать usort() сортировать их по percentage полю в подмассивах. Используйте контрольную переменную в цикле foreach, чтобы она работала на массивах на месте.

foreach ($array as &$subarray) { 
    usort ($subarray, function ($a, $b) { 
     return $a['percentage'] - $b['percentage']; 
    } 
} 
+0

У вас были бы какие-то отношения с oBArMAr? ..... Серьезно, это честное любопытство ..... Просто вы выглядите как фигура авторитета ;-) – Poiz

1

С смесь array_walk и usort; вы можете выполнить эту работу. В приведенном ниже кодексе показано, как.

Вкратце: чтобы получить работу

<?php 

     // FIRST; SORT THE MAIN ARRAY IN REVERSE ORDER... 
     rsort($mdArray); 

     // IF YOU WANT TO SORT BY ANY OTHER FIELD, SAY "EmpId" 
     // YOU CAN SIMPLY CHANGE THE DEFAULT VALUE OF $field to "EmpId" 
     function sortByField($prev, $next, $field="percentage") { 
      return $next[$field] - $prev[$field]; 
     } 

     array_walk($mdArray, function(&$data){ 
      usort($data, "sortByField"); 
     }); 

В деталях: с образцом массива:

<?php 
     $mdArray = array(
      array (
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 15, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 78, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 20 ,"max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 10, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 77, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 34, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 22, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 78, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 49, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 55, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 36, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU100", "EmpName" => "XXXXXX", "percentage" => 18, "max_point" => null, "opt_point" => null,) 
      ), 
      array (
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 70, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 54, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 23, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 46, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 10, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 21, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 80, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 34, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 50, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 27, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 39, "max_point" => null, "opt_point" => null,), 
       array("EmpId" => "STU101", "EmpName" => "YYYYY", "percentage" => 12, "max_point" => null, "opt_point" => null,), 
      ), 
     ); 


     // FIRST; SORT THE MAIN ARRAY IN REVERSE ORDER... 
     rsort($mdArray); 

     // IF YOU WANT TO SORT BY ANY OTHER FIELD, SAY "EmpId" 
     // YOU CAN SIMPLY CHANGE THE DEFAULT VALUE OF $field to "EmpId" 
     function sortByField($prev, $next, $field="percentage") { 
      return $next[$field] - $prev[$field]; 
     } 

     array_walk($mdArray, function(&$data){ 
      usort($data, "sortByField"); 
     }); 

     var_dump($mdArray); 

var_dump выше производит что-то вроде ниже результата. Обратите внимание, что теперь массив сортируется по процентам в порядке убывания. Если вы хотите изменить процесс (т. Е. Сортировать по возрастанию), просто замените $next и $prev внутри (внутри) функции: sortByField.

 array (size=2) 
      0 => 
      array (size=12) 
       0 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 78 
        'max_point' => null 
        'opt_point' => null 
       1 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 78 
        'max_point' => null 
        'opt_point' => null 
       2 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 77 
        'max_point' => null 
        'opt_point' => null 
       3 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 55 
        'max_point' => null 
        'opt_point' => null 
       4 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 49 
        'max_point' => null 
        'opt_point' => null 
       5 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 36 
        'max_point' => null 
        'opt_point' => null 
       6 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 34 
        'max_point' => null 
        'opt_point' => null 
       7 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 22 
        'max_point' => null 
        'opt_point' => null 
       8 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 20 
        'max_point' => null 
        'opt_point' => null 
       9 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 18 
        'max_point' => null 
        'opt_point' => null 
       10 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 15 
        'max_point' => null 
        'opt_point' => null 
       11 => 
       array (size=5) 
        'EmpId' => string 'STU100' (length=6) 
        'EmpName' => string 'XXXXXX' (length=6) 
        'percentage' => int 10 
        'max_point' => null 
        'opt_point' => null 
      1 => 
      array (size=12) 
       0 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 80 
        'max_point' => null 
        'opt_point' => null 
       1 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 70 
        'max_point' => null 
        'opt_point' => null 
       2 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 54 
        'max_point' => null 
        'opt_point' => null 
       3 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 50 
        'max_point' => null 
        'opt_point' => null 
       4 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 46 
        'max_point' => null 
        'opt_point' => null 
       5 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 39 
        'max_point' => null 
        'opt_point' => null 
       6 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 34 
        'max_point' => null 
        'opt_point' => null 
       7 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 27 
        'max_point' => null 
        'opt_point' => null 
       8 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 23 
        'max_point' => null 
        'opt_point' => null 
       9 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 21 
        'max_point' => null 
        'opt_point' => null 
       10 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 12 
        'max_point' => null 
        'opt_point' => null 
       11 => 
       array (size=5) 
        'EmpId' => string 'STU101' (length=6) 
        'EmpName' => string 'YYYYY' (length=5) 
        'percentage' => int 10 
        'max_point' => null 
        'opt_point' => null 

Проверить это here.

+0

Спасибо вам, мне нужен 2-й массив до 1-го от первого до второго, например, ex: STU101 должен был быть первым, STU100 пришел 2-й, как будто мне нужен массив ... Не могли бы вы помочь мне ... – Babu

+0

@Babu Вы можете попробовать обновленный код еще раз ... (if вы хотите) – Poiz

+0

Спасибо, друг ... – Babu

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