繁体   English   中英

php根据键重新排列数组

[英]Php rearrange array according to the key

我尝试将数组类型从$ data转换为$ data2,但没有成功。

$data数组中,所有值均根据日期放置。

但是在$data2值是根据标题放置的。

我想知道它是否是可转换数组。

$data['Group1']['Date1']['Empty'] = 5;
$data['Group1']['Date1']['Reservated'] = 1;
$data['Group1']['Date1']['WillReturn'] = 3;
$data['Group1']['Date1']['Remains'] = 1;
$data['Group1']['Date2']['Empty'] = 2;
$data['Group1']['Date2']['Reservated'] = 2;
$data['Group1']['Date2']['WillReturn'] = 3;
$data['Group1']['Date2']['Remains'] = -3;

$data['Group2']['Date1']['Empty'] = 0;
$data['Group2']['Date1']['Reservated'] = 1;
$data['Group2']['Date1']['WillReturn'] = 3;
$data['Group2']['Date1']['Remains'] = -4;
$data['Group2']['Date2']['Empty'] = 10;
$data['Group2']['Date2']['Reservated'] = 1;
$data['Group2']['Date2']['WillReturn'] = 1;
$data['Group2']['Date2']['Remains'] = 8;

$data2 = [
    'Group1' => [
        [ 'Title' => 'Empty',
            'Date1' => 5,
            'Date2' => 2,

        ],
        [ 'Title' => 'Reservated',
            'Date1' => 1,
            'Date2' => 2,

        ],
        [ 'Title' => 'WillReturn',
            'Date1' => 3,
            'Date2' => 3,
        ],
        [ 'Title' => 'Remains',
            'Date1' => 1,
            'Date2' => -3,
        ],
        // etc...
    ],
    'Group2' => [
        [ 'Title' => 'Empty',
            'Date1' => 0,
            'Date2' => 10,

        ],
        [ 'Title' => 'Reservated',
            'Date1' => 1,
            'Date2' => 1,

        ],
        [ 'Title' => 'WillReturn',
            'Date1' => 3,
            'Date2' => 1,
        ],
        [ 'Title' => 'Remains',
            'Date1' => -4,
            'Date2' => -8,
        ],
        // etc...
    ],
    // etc...
];

一些尝试在这里:

$new = [];
    $grp = array_keys($datax);
    $i =0;
    foreach($datax as $key => $val)
    {
        $dates = array_keys($val);
        foreach($val as $k=>$v)
        {
            $cases = array_keys($v);
            $caseAndVals[$i]=$v;
            $i++;
        }
    }
    $z =0;
    $y = 0;
    foreach($grp as $g)
    {
        foreach($cases as $c)
        {
            $new[$g][$z]['Title']=$c;
            foreach($dates as $d)
            {
                $new[$g][$z][$d] = 'values which correspond to the date and title';
            }
            $z++;
        }

    }

我根据组和案例转换了数组,但是我没有成功放置对应日期的值...

你很亲密

要获取与values which correspond to the date and titlevalues which correspond to the date and title ,请使用$data[$g][$d][$c]

并且您每次需要通过$grp循环将$z重置$z 0 ,以便在每个组数组上获得正确的索引。

$new = array();
$grp = array_keys($data);

foreach($data as $key => $val)
{
    $dates = array_keys($val);
    foreach($val as $k=>$v)
    {
        $cases = array_keys($v);
        $caseAndVals[]=$v;
    }
}

foreach($grp as $g)
{
    $z = 0;
    foreach($cases as $c)
    {
        $new[$g][$z]['Title']=$c;
        foreach($dates as $d)
        {
            $new[$g][$z][$d] = $data[$g][$d][$c];
        }
        $z++;
    }
}

暂无
暂无

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

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