2015-11-25 2 views
0

Я работаю над функциями массива в php i, сталкиваясь с некоторой проблемой при сортировке массивов.многоразмерный многомерный ассоциативный массив в php

массива является:

$employees = array(
    123 => array(
     'id'  => 13, 
     'firstname' => 'Marky', 
     'lastname' => 'Mark' 
    ), 
    213 => array(
     'id'  => 3, 
     'firstname' => 'Bobby', 
     'lastname' => 'Bob' 
    ), 
    256 => array(
     'id'  => 42, 
     'firstname' => 'Jimmy', 
     'lastname' => 'Jim' 
    ) 
); 

Я хочу, чтобы этот массив будет сортировать по ПгвЬЫату поля не влияя на значение ключа

я использовал

foreach($employees as $intKey => $Data) { 
         $arrstr[$intKey] = $Data['firstname']; 
        } 
array_multisort($arrstr, SORT_DESC, SORT_STRING, $employees); 

, но эта функция влияет мое ключевое значение основного массива и выдайте мне положительный результат

$employees = array(
     0=> array(
      'id'  => 3, 
      'firstname' => 'Bobby', 
      'lastname' => 'Bob' 
     ), 
     1=> array(
      'id'  => 42, 
      'firstname' => 'Jimmy', 
      'lastname' => 'Jim' 
     ) 
     2=> array(
      'id'  => 13, 
      'firstname' => 'Marky', 
      'lastname' => 'Mark' 
     ), 
    ); 

Здесь он влияет на мое ключевое значение основного массива.

поэтому, пожалуйста, помочь некоторым, как добиться точного результата, не влияя на значение ключа как:

$employees = array(
     213 => array(
      'id'  => 3, 
      'firstname' => 'Bobby', 
      'lastname' => 'Bob' 
     ), 
     256 => array(
      'id'  => 42, 
      'firstname' => 'Jimmy', 
      'lastname' => 'Jim' 
     ),`enter code here` 
     123 => array(
      'id'  => 13, 
      'firstname' => 'Marky', 
      'lastname' => 'Mark' 
     ) 
    ); 
+0

'uasort' должен быть тем, что вы ищете. – deceze

ответ

0

1, раствор может быть, чтобы использовать uksort функцию

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

как:

function sort_on_name($a , $b) { 
    return strcmp(
    $GLOBALS['employees'][$a]['firstname'] , 
    $GLOBALS['employees'][$b]['firstname'] 
); 
} 

$GLOBALS['employees']=$employees; 
uksort($employees , 'sort_on_name'); 

2, другое решение могло бы сделать помощник поиска массив пар ключ-значение на (как

$ сортировкой = массив ('Bobby' => 213, «Jimmy» => 256 ...)

и просто, что-то и использовать новый помощник подстановок Еогеасп в качестве поиска на исходном массиве

+2

'uksort ($ employees, function ($ a, $ b) use ($ employees) {..})' - намного лучше, чем '$ GLOBALS'. – deceze

+0

Я использовал только некоторые значения, но массив employee, который я получаю, имеет 10K-данных, если я использовал foreach в своем любом из кода, который будет замедлять работу скрипта. –