2016-09-19 6 views
-2

У меня есть следующий массив в качестве ответа от db. Я пытаюсь преобразовать этот ответ базы данных в многомерный массив в соответствии с моим требованием.Изменение ключа многомерного массива

 Array 
(
    [0] => Array 
     (
      [0] => Array 
       (
        [_id] => C10359 
        [AE] => Array 
         (
          [0] => 89785 
          [1] => 89786 
          [2] => 89857 
          [3] => 89859 
         ) 

       ) 

      [1] => Array 
       (
        [_id] => C10428 
        [AE] => Array 
         (
          [0] => 50191 
          [1] => 50203 
          [2] => 50230 
          [3] => 50244 
         ) 

       ) 
     ) 

    [1] => Array 
     (
      [0] => Array 
       (
        [_id] => C10350 
        [AE] => Array 
         (
          [0] => 89785 
          [1] => 89786 
          [2] => 89857 
          [3] => 89859 
         ) 

       ) 

      [1] => Array 
       (
        [_id] => C10430 
        [AE] => Array 
         (
          [0] => 50191 
          [1] => 50203 
          [2] => 50230 
          [3] => 50244 
         ) 

       ) 
     ) 
) 

Теперь мне нужно преобразовать вышеуказанный массив следующим образом.

Array 
(
    [0] => Array 
     (
      [C10359] => Array 
       (
        [0] => 89785 
        [1] => 89786 
        [2] => 89857 
        [3] => 89859 
       ) 
      [C10428] => Array 
       (
        [0] => 50191 
        [1] => 50203 
        [2] => 50230 
        [3] => 50244 
       ) 
     ) 

    [1] => Array 
     (
      [C10350] => Array 
       (
        [0] => 89785 
        [1] => 89786 
        [2] => 89857 
        [3] => 89859 
       ) 
      [C10430] => Array 
       (
        [0] => 50191 
        [1] => 50203 
        [2] => 50230 
        [3] => 50244 
       ) 
     ) 
) 

Ниже образом я пытаюсь

array_map(function($arr) { 
     return $arr[0] ; 
    },$panel_result); 

Но это не работает.

Просьба указать, как я могу конвертировать в требуемый формат.

+1

Покажите нам, что вы пробовали, чтобы получить ваш массив в нужное foramt, SO не бесплатный сервис кодирования. – Epodax

+0

Я попытался использовать функцию array_map, но он не работает. – Amit

ответ

3

Это должен сделать трюк:

$arr = array(
    array(
     array(
      '_id' => 'C10359', 
      'AE' => array 
      (
       89785, 
       89786, 
       89857, 
       89859, 
      ), 
     ), 
     array(
      '_id' => 'C10428', 
      'AE' => array 
      (
       50191, 
       50203, 
       50230, 
       50244, 
      ), 
     ), 
    ), 
); 

$output = array(); 
foreach ($arr as $levelK => $level) { 
    if(!isset($output[$levelK])){ 
     $output[$levelK] = array(); 
    } 

    foreach ($level as $subLevel) { 
     $id = $subLevel['_id']; 

     if (!isset($output[$levelK][$id])) { 
      $output[$levelK][$id] = array(); 
     } 

     foreach ($subLevel['AE'] as $val) { 
      $output[$levelK][$id][] = $val; 
     } 
    } 
} 

Надеется, что это помогает.

+0

ненужные два foreach. –

+1

@ Обязательно, я бы, наверное, сделал это по-другому, если бы у меня было больше информации о структуре массива OP. Не имея этой информации, я просто хотел предоставить простой и рабочий пример, соответствующий предоставленным данным. – vincenth

+0

@vincenth Я получаю динамический массив ответа. Я обновил массив в вопросе – Amit

1

Используйте array_column() и передайте третий параметр в качестве ключевого слова.

$reqArray = array(); 
foreach ($yourArray as $key => $innerArray) { 
    $reqArray[] = array_column($innerArray, 'AE', '_id'); 
} 

ИЛИ

Использование array map()

$reqArray = array_map(function($a){ 
return array_column($a, 'AE', '_id'); 
},$arr); 
+0

Я добавил array_map также в ваш ответ, поскольку OP пробовал этот путь. –

+0

Да, спасибо, но это можно добавить как отдельный (так как он использует другую функцию массива). – jitendrapurohit

+0

Не нужно это Bro. Централизация логики одинакова :) –

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