如何在以下场景中操作数组?

时间:2014-01-21 15:29:01

标签: php arrays multidimensional-array associative-array dynamic-arrays

我有一个名为$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相对较新。有人可以帮我这方面吗?

2 个答案:

答案 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']);