我有一个看起来像这样的数组。这是2维数组。

$MainArray = Array
(
    [0] => Array
        (
            [Job_Name] => WXYZ
            [Quantity] => 1000
            [Machine_Name] => Machine1
            [Start_Date] => 2014-07-30 00:00:00
            [Completion_Date] => 2014-08-02 00:00:00
            [Labor] => 4
        )
    [1] => Array
        (
            [Job_Name] => ABCD
            [Quantity] => 1500
            [Machine_Name] => Machine2
            [Start_Date] => 2014-08-08 00:00:00
            [Completion_Date] => 2014-08-14 00:00:00
            [Labor] => 2
        )
    [2] => Array
        (
            [Job_Name] => BCDA
            [Quantity] => 1200
            [Machine_Name] => Machine1
            [Start_Date] => 2014-08-02 00:00:00
            [Completion_Date] => 2014-08-07 00:00:00
            [Labor] => 1
        )
 )


我想使用此信息来创建一个新的3维数组,如下所示。

$ConvertedArray = Array
(
    [Machine1] => Array
        (
            [0] => Array
               (
                  [Job_Name] => WXYZ
                  [Quantity] => 1000
                  [Start_Date] => 2014-07-30 00:00:00
                  [Completion_Date] => 2014-08-02 00:00:00
                  [Labor] => 4
               )
            [1] => Array
               (
                  [Job_Name] => BCDA
                  [Quantity] => 1200
                  [Start_Date] => 2014-08-02 00:00:00
                  [Completion_Date] => 2014-08-07 00:00:00
                  [Labor] => 1
               )
         )
      [Machine2] => Array
        (
            [0] => Array
               (
                  [Job_Name] => ABCD
                  [Quantity] => 1500
                  [Machine_Name] => Machine2
                  [Start_Date] => 2014-08-08 00:00:00
                  [Completion_Date] => 2014-08-14 00:00:00
                  [Labor] => 2
               )
         )   
)


请对此提供任何帮助。我陷入困境,需要弄清楚如何使用此原始数组创建新数组。因此,基本上,我将每台计算机上的所有作业分组在一起,而这些作业的密钥取决于它们在原始阵列中的状态。因此,如果原始阵列中有一个键为2的作业,而该机器上没有其他作业具有更高的键,则它将变为该作业的键0,并使用该机器名创建一个新键。

非常感谢您的帮助。

评论

您想根据需要获得特定输出的内容..!

@Mav我们如何知道哪些子数组应在输出中保留Machine_Name元素?看看Machine1子数组如何不包含Machine_Name元素,而Machine2子数组如何呢?这使您的问题成为不清楚的“需求转储”。

副本:stackoverflow.com/q/12706359/2943403

这回答了你的问题了吗?如何按列值对子数组进行分组?

#1 楼

foreach ($MainArray as $value) {
    $name = $value['Machine_Name'];
    unset($value['Machine_Name']);
    $ConvertedArray[$name][] = $value;
}


#2 楼

请使用以下代码:-
$result = [];
foreach($MainArray as $record){
 $result[$record['Machine_Name']][] = $record;
}


评论


这个无法解释的代码片段正在向fib告知其输出。想知道我如何可以说您只是复制了OP的问题正文中的输出吗? Machine_Name仅位于最后一个子数组的数据中。

– mickmackusa
12月14日6:36



@mickmackusa:感谢您指出。在4年前回答了这个问题,所以不完全是这个主意,是的,缺少Machine_Name键。刚刚删除了输出。我认为OP只是想根据Machine_Name区分数据。

–拉维·希拉尼(Ravi Hirani)
12月14日9:04

现在,您只需要在代码段中附带说明即可。我使用旧页面来关闭新的重复页面,但是由于1.问题不是100%清晰,并且2.没有解释答案,因此我无法满怀信心地使用此页面来教育用户。

– mickmackusa
12月14日9:14