3

У меня есть массив под названием $data. На самом деле это довольно большой массив, и он генерируется динамически. Это означает, что он может быть небольшим или большим. Но для справки я печатаю относительно небольшой экземпляр массива $data:Как манипулировать массивом в следующем сценарии?

Array 
(
    [op] => edit 
    [pt_id] => 4 
    [form_submitted] => yes 
    [pt_doc_title] => Array 
     (
      [1] => Test Document 
      [2] => New Joining 
      [3] => Happy New Year 
     ) 

    [pt_doc_id] => Array 
     (
      [0] => 6 
      [1] => 7 
     ) 

    [pt_doc_file_iname] => Array 
     (
      [0] => test_document.docx 
      [1] => new_joining.pdf 
     ) 

    [submit] => Update 
) 

Я хочу, чтобы манипулировать выше массив ($data) таким образом, что он должен выглядеть следующим образом:

Array 
(
    [op] => edit 
    [pt_id] => 4 
    [form_submitted] => yes 
    [pt_documents_data] => Array   
     (
     [0] => Array 
     ( 
      [pt_doc_title] => Test Document 
     [pt_doc_id] => 6 
     [pt_doc_file_iname] => test_document.docx 
     ) 
     [1] => Array 
     (
     [pt_doc_title] => New Joining 
     [pt_doc_id] => 7 
     [pt_doc_file_iname] => new_joining.pdf 
     ) 
     [2] => Array 
       (
     [pt_doc_title] => Over load 
     [pt_doc_id] => 
     [pt_doc_file_iname] => 
      ) 
     ) 
) 

Но я не понимаю, как это сделать, поскольку я относительно новичок в Manray в Array в PHP. Может ли кто-нибудь помочь мне в этом отношении?

+0

Если название один начинается с 0 или действительно 1? – Farkie

+0

@ Фарки: Я тебя не понял. Не могли бы вы объяснить, пожалуйста? – PHPLover

+0

[pt_doc_title] => Массив ( [1] => Тестовый документ [2] => Новое Присоединение [3] => Happy New Year – Farkie

ответ

4
foreach ($array['pt_doc_title'] as $key => $title) { 
    $id = isset($array['pt_doc_id'][$key])   ? $array['pt_doc_id'][$key]   : null; 
    $file = isset($array['pt_doc_file_iname'][$key]) ? $array['pt_doc_file_iname'][$key] : null; 

    $array['pt_documents_data'][] = array(
     'pt_doc_title'  => $title, 
     'pt_doc_id'   => $id, 
     'pt_doc_file_iname' => $file 
    ); 
} 

unset($array['pt_doc_title'], $array['pt_doc_id'], $array['pt_doc_file_iname']); 

Что-то в этом роде. Вы используете ключи от $array['pt_doc_title'], чтобы получить соответствующие другие два значения из двух других массивов, затем вы группируете их в новый массив pt_documents_data.

Для упрощенного примера общей операции:

$array = array(
    'foo' => array('a', 'b', 'c'), 
    'bar' => array('x', 'y', 'z') 
); 

$result = array(); 

foreach ($array['foo'] as $key => $foo) { 
    $result[] = array('foo' => $foo, 'bar' => $array['bar'][$key]); 
} 

// result: array(array('foo' => 'a', 'bar' => 'x'), array('foo' => 'b', 'bar' => 'y'), ...) 
+0

Вы забыли удалить '[submit ] => Обновить'. –

+1

Я оставлю эти тривиальные детали OP. – deceze

+0

Также - ключ $ должен быть id-1 по какой-то неизвестной причине. – Farkie

0

Это должно сделать это, хотя и не в вашем определенном порядке:

foreach ($array['pt_doc_title'] as $id => $title) { 
      $new_array = array('pt_doc_title' => $title, 
           'pt_doc_id' => $array['pt_doc_id'][$id-1], 
           'pt_doc_file_iname' => $array['pt_doc_file_iname'][$id-1] 
         ); 
      $array['pt_documents_data'][] = $new_array; 
} 

unset($array['pt_doc_title'],$array['pt_doc_id'],$array['pt_doc_file_iname'], $array['update']); 
Смежные вопросы