2015-08-07 2 views
1

У меня есть массив, имеющий несколько значений для одинаковых значений массива одинаковых ключейSet :: объединить CakePHP, создавая многомерный массив, используя одномерный массив

например.

Array(
    [0] => Array(
        'name' => "Bob", 
        'age' => 20, 
        'marks'=> 50 
       ) 
    [1] => Array(
        'name' => "Ryan", 
        'age' => 20, 
        'marks'=> 57 
       ) 
    [2] => Array(
        'name' => "Allen", 
        'age' => 23, 
        'marks'=> 70 
       ) 
    [3] => Array(
        'name' => "Duke", 
        'age' => 23, 
        'marks'=> 67 
       ) 
    [4] => Array(
        'name' => "Matt", 
        'age' => 24, 
        'marks'=> 85 
       ) 
) 

Я хочу, чтобы их преобразовать в соответствии с возрастом, следующим образом: Set :: Combine in Cakephp.

Array(
    [20] => Array(
       [0] => Array(
          'name' => "Bob", 
          'age' => 20, 
          'marks'=> 50 
          ) 
       [1] => Array(
          'name' => "Ryan", 
          'age' => 20, 
          'marks'=> 57 
          ) 
       ) 
    [23] => Array(
       [0] => Array(
          'name' => "Allen", 
          'age' => 23, 
          'marks'=> 70 
          ) 
       [1] => Array(
          'name' => "Duke", 
          'age' => 23, 
          'marks'=> 67 
          ) 
       ) 
    [24] => Array(
       [0] => Array(
          'name' => "Matt", 
          'age' => 24, 
          'marks'=> 85 
          ) 
       ) 

) 

Я могу получить только один контент для определенного возраста.

ответ

1

Если я правильно понял ваш вопрос, вы можете получить почти то, что вы хотите использовать это (проверено с CakePHP 3):

Hash::combine($array, '{n}.user', '{n}', '{n}.age') ; 

Вы можете использовать array_map и array_values, чтобы получить именно то, что вы хотите:

array_map('array_values', Hash::combine($array, '{n}.name', '{n}', '{n}.age')) 

не забудьте добавить следующее заявление: useuse \Cake\Utility\Hash ;

Edit: Похоже, что вы используете CakePHP 2, выше, должны работать, вам просто нужно заменить Hash на Set:

array_map('array_values', Set::combine($array, '{n}.name', '{n}', '{n}.age')) 

Пример:

$array = array(
    0 => array(
     'name' => "Bob", 
     'age' => 20, 
     'marks'=> 50 
    ), 
    1 => array(
     'name' => "Ryan", 
     'age' => 20, 
     'marks'=> 57 
    ), 
    2 => array(
     'name' => "Allen", 
     'age' => 23, 
     'marks'=> 70 
    ), 
    3 => array(
     'name' => "Duke", 
     'age' => 23, 
     'marks'=> 67 
    ), 
    4 => array(
     'name' => "Matt", 
     'age' => 24, 
     'marks'=> 85 
    ) 
) ; 
debug($array); 
debug(\Cake\Utility\Hash::combine($array, '{n}.user', '{n}', '{n}.age')); 
debug(array_map('array_values', \Cake\Utility\Hash::combine($array, '{n}.name', '{n}', '{n}.age'))); 

Выход:

\src\Controller\PagesController.php (line 61) 

[ 
    (int) 0 => [ 
     'name' => 'Bob', 
     'age' => (int) 20, 
     'marks' => (int) 50 
    ], 
    (int) 1 => [ 
     'name' => 'Ryan', 
     'age' => (int) 20, 
     'marks' => (int) 57 
    ], 
    (int) 2 => [ 
     'name' => 'Allen', 
     'age' => (int) 23, 
     'marks' => (int) 70 
    ], 
    (int) 3 => [ 
     'name' => 'Duke', 
     'age' => (int) 23, 
     'marks' => (int) 67 
    ], 
    (int) 4 => [ 
     'name' => 'Matt', 
     'age' => (int) 24, 
     'marks' => (int) 85 
    ] 
] 


\src\Controller\PagesController.php (line 62) 

[ 
    (int) 20 => [ 
     'Bob' => [ 
      'name' => 'Bob', 
      'age' => (int) 20, 
      'marks' => (int) 50 
     ], 
     'Ryan' => [ 
      'name' => 'Ryan', 
      'age' => (int) 20, 
      'marks' => (int) 57 
     ] 
    ], 
    (int) 23 => [ 
     'Allen' => [ 
      'name' => 'Allen', 
      'age' => (int) 23, 
      'marks' => (int) 70 
     ], 
     'Duke' => [ 
      'name' => 'Duke', 
      'age' => (int) 23, 
      'marks' => (int) 67 
     ] 
    ], 
    (int) 24 => [ 
     'Matt' => [ 
      'name' => 'Matt', 
      'age' => (int) 24, 
      'marks' => (int) 85 
     ] 
    ] 
] 

\src\Controller\PagesController.php (line 63) 

[ 
    (int) 20 => [ 
     (int) 0 => [ 
      'name' => 'Bob', 
      'age' => (int) 20, 
      'marks' => (int) 50 
     ], 
     (int) 1 => [ 
      'name' => 'Ryan', 
      'age' => (int) 20, 
      'marks' => (int) 57 
     ] 
    ], 
    (int) 23 => [ 
     (int) 0 => [ 
      'name' => 'Allen', 
      'age' => (int) 23, 
      'marks' => (int) 70 
     ], 
     (int) 1 => [ 
      'name' => 'Duke', 
      'age' => (int) 23, 
      'marks' => (int) 67 
     ] 
    ], 
    (int) 24 => [ 
     (int) 0 => [ 
      'name' => 'Matt', 
      'age' => (int) 24, 
      'marks' => (int) 85 
     ] 
    ] 
] 
+0

Спасибо, что добавили подробные решения. – zion

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