【问题标题】:Mapping array to new array将数组映射到新数组
【发布时间】:2020-01-18 17:03:08
【问题描述】:

我有一个数组,其中有一个数组,我想为每个“power”数组值创建一个新数组。最好的方法是什么?

原始数组:

Array
(
    [0] => Array
        (
            [date] => 2019-09-16 15:16:03
            [stid] => 64
            [beam] => 1
            [power] => {1,3,7,8,9}
            [gates] => 5
)

   [1] => Array
        (
            [date] => 2019-09-16 15:17:03
            [stid] => 64
            [beam] => 1
            [power] => {14,15,16}
            [gates] => 3
)
)

编辑:输出数组应该从 1 开始递增门

Array
(
    [0] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 1
            [power] => 1
        )

   [1] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 2
            [power] => 3
         )

   [2] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 3
            [power] => 7
         )

   [3] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 4
            [power] => 8
         )


   [4] => Array
        (
            [date] => 2019-09-16 15:16:03
            [gate] => 5
            [power] => 9
         )

   [5] => Array
        (
            [date] => 2019-09-16 15:17:03
            [gate] => 1
            [power] => 14
         )

   [6] => Array
        (
            [date] => 2019-09-16 15:17:03
            [gate] => 2
            [power] => 15
         )

   [7] => Array
        (
            [date] => 2019-09-16 15:17:03
            [gate] => 3
            [power] => 16
         )
)

对所有 8(5 和 3)个幂值继续,这样得到的数组是 8 个数组的数组。

【问题讨论】:

    标签: php arrays mapping


    【解决方案1】:
    # Original Data Structure
    $arr = 
    [
        [
            'date' => '2019-09-16 15:16:03',
            'stid' => 64,
            'beam' => 1,
            'power' => '{1,3,7,8,9}',
            'gates' => 5
        ],
        [
            'date' => '2019-09-16 15:17:03',
            'stid' => 64,
            'beam' => 1,
            'power' => '{14,15,16}',
            'gates' => 3
        ]
    ];
    
    $output = [];
    foreach ($arr as $a)
    {
        $gateCount = 0;
        foreach (explode(',', trim($a['power'], '{}')) as $p) 
        {
            $output[] = [
                'date' => $a['date'],
                'gate' => $gateCount++ % $a['gates'] + 1,
                'power' => $p
            ];
        }
    }
    print_r($output);
    

    输出:

    Array
    (
        [0] => Array
            (
                [date] => 2019-09-16 15:16:03
                [gate] => 1
                [power] => 1
            )
    
        [1] => Array
            (
                [date] => 2019-09-16 15:16:03
                [gate] => 2
                [power] => 3
            )
    
        [2] => Array
            (
                [date] => 2019-09-16 15:16:03
                [gate] => 3
                [power] => 7
            )
    
        [3] => Array
            (
                [date] => 2019-09-16 15:16:03
                [gate] => 4
                [power] => 8
            )
    
        [4] => Array
            (
                [date] => 2019-09-16 15:16:03
                [gate] => 5
                [power] => 9
            )
    
        [5] => Array
            (
                [date] => 2019-09-16 15:17:03
                [gate] => 1
                [power] => 14
            )
    
        [6] => Array
            (
                [date] => 2019-09-16 15:17:03
                [gate] => 2
                [power] => 15
            )
    
        [7] => Array
            (
                [date] => 2019-09-16 15:17:03
                [gate] => 3
                [power] => 16
            )
    
    )
    

    注意:

    ['beam']['stid'] 根据您的示例已被忽略。如果需要,可以轻松添加。

    【讨论】:

    • 这是真的。在我对数据结构的示例重建中,我只是将其设为了一个数组,
    • 我修改了我的答案,让结构使用{x,y} 格式和foreach 相应地。
    • 另外,在这个例子中,门应该等于 0,1,2,3,4,5,0,1,2。我该如何添加?
    • @mcook16,编辑您的原始问题以指定应如何填充门索引。
    • @mcook16 您希望如何定义您的'gate'
    【解决方案2】:

    你可以这样做:

    $newArray = [];
    foreach ($oldArray as $element) {
       foreach ($element['power'] as $power) {
          $element['power'] = $power;
          $newArray[] = $element;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多