简体   繁体   English

将数组映射到新数组

[英]Mapping array to new array

I have an array which has an array within it, and I want to create a new array for each of the array values of 'power'. 我有一个数组,里面有一个数组,我想为每个'power'数组值创建一个新数组。 What is the best way to do this? 做这个的最好方式是什么?

Original array: 原始数组:

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
)
)

Edit: Output array should increment gate started from 1 编辑:输出数组应从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
         )
)

Continued for all 8 (5 and 3) power values, such that the resultant array is an array of 8 arrays. 对于所有8个(5和3)幂值继续执行,这样结果数组为8个数组的数组。

# 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);

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
        )

)

Note: 注意:

['beam'] and ['stid'] have been left off as per your sample. 根据您的样本, ['beam']['stid']已被['stid'] Can easily be added if you need them. 可以根据需要轻松添加。

You can do this: 你可以这样做:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM