【问题标题】:How to manipulate the array in following scenario?如何在以下场景中操作数组?
【发布时间】:2014-02-11 07:05:47
【问题描述】:

我有一个名为$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 中的数组操作相对较新。任何人都可以在这方面帮助我吗?

【问题讨论】:

  • 标题一应该以0开头还是1开头?
  • @Farkie:我没听懂你。能否进一步解释一下?
  • [pt_doc_title] => 数组 ( [1] => 测试文档 [2] => 新加入 [3] => 新年快乐
  • 应该是:` [pt_doc_title] => 数组([0] => 测试文档[1] => 新加入[2] => 新年快乐`
  • 您能用语言描述一下究竟应该发生什么吗?

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


【解决方案1】:

应该这样做,但不是按照您的特定顺序:

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

【讨论】:

    【解决方案2】:
    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'), ...)
    

    【讨论】:

    • 您忘记删除[submit] => Update 对。
    • 我会把这些琐碎的细节留给 OP。
    • 实际上我得到的数组是这样的:Array([op] => edit [pt_id] => 4[form_submitted] => yes [submit] => Update [pt_documents_data] => Array ([0] => Array([pt_doc_title] => 测试文档 [pt_doc_id] => 7[pt_doc_file_iname] => new_joining.pdf)[1] => Array([pt_doc_title] => 新加入 [pt_doc_id] => [ pt_doc_file_iname] => ) [2] => 数组 ([pt_doc_title] => 你好快乐 [pt_doc_id] => [pt_doc_file_iname] => ) )
    • @PHP 这意味着......它有效吗?没有?您需要更多帮助吗?
    • 实际上问题是根据您的逻辑,子数组 [pt_doc_id] 和数组 [pt_doc_file_iname] 中具有 0 键的元素不可访问,因为 $key 的起始值为 1。这就是为什么我m 无法访问键值为零的 pt_doc_id 和 pt_doc_file_iname。
    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多