我有一个名为$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] =>
)
)
)
但我不知道如何实现这一点,因为我对PHP中的Array Manipulations相对较新。有人可以帮我这方面吗?
答案 0 :(得分: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'), ...)
答案 1 :(得分: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']);