PHP根据密钥重新排列阵列



我尝试将数组类型从$数据转换为$ 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 title,使用$data[$g][$d][$c]

,您需要每次通过$grp循环将$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++;
    }
}

最新更新