2016-12-21 14 views
0

配列型を$ dataから$ data2に変換しようとしましたが、成功しませんでした。PHPはキーに従って配列を並べ替えます

$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++; 
     } 

    } 

私はグループやケースに応じて配列を変換しますが、私は値を配置する成功は、日付を対応していませんでした...

+1

SOは無料のコーディングサービスではありません。試したコードを表示する必要があります。その後、修正するのを手伝ってくれます。 – Barmar

+0

@Barmar本当に本当のコードはありません。私はちょうどそれを考えている。あなたが私のトピックを検索すると、私は無料のコーディングサービスのためにここにいないことがわかります。 – yigitozmen

+0

あなたは「私は試しましたが、成功しませんでした」と書いています。あなたが試したことを示してください。 – Barmar

答えて

1

あなたは非常に近いです。

values which correspond to the date and titleを取得するには、$data[$g][$d][$c]を使用してください。

そして、$grpループを使用して毎回$z0にリセットする必要があるため、各グループの配列に正しいインデックスが割り当てられます。

$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++; 
    } 
} 
+0

私の過ちを見せていただきありがとうございます。 – yigitozmen

関連する問題