2011-08-16 67 views
0

這可能看起來是一個相當微不足道的問題,請原諒我的無知。仍然得到數組操作的hang ... ......從鍵/值轉換爲多維數組

我有一個CakePHP應用程序將數組發佈到我的控制器中進行保存。我需要重新格式化發送的數組,以便它可以通過Cake的Save行爲正確處理。

發佈的數組是:

Array ( 
     [788] => Array ([id] => 788) 
     [787] => Array ([id] => 787) 
     [786] => Array ([id] => 0) 
     [785] => Array ([id] => 0) 

     [value_1] => 0 

     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 

     [job_id] => 34 
) 

期望的數組:

Array ( 
    [0] => Array ( 
     [id] => 788 
     [value_1] => 0 
     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 
    ) 
    [1] => Array ( 
     [id] => 787 
     [value_1] => 0 
     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 
    ) 
) 

感謝您抽出時間來看看。


編輯:

我剛意識到我省略一個事實,即如果該數組有一個[ID] => 0,它需要被忽略。這是我的主要絆腳石。道歉。我希望編輯能夠更好地闡明我的問題。

解決

謝謝您的幫助球員。我能夠自己想出解決方案。這是我想出來的。

foreach($org_array as $key => $value){ 
    if(is_array($value)){ 
     if(isset($value['id'])){ 
      if($value['id'] != 0) { 
       $data[$i] = array(
        'id' => $value['id'], 
        'value_1'=> $value_1, 
        'analysed_date' => $date 
       ); 
       $i++; 
      } 
     } 
    } 
} 

回答

1

像這樣的事情應該工作,但只爲你的例子:

$array_keys = array_keys($org_array); 
$new_array = array(); 
foreach ($array_keys as $key) 
{ 
    if (is_int($key)) 
    { 
    $new_array[] = array(
     "id" => $key, 
     "value1" => $org_array["value1"], 
     "analysed_date" => $org_array["analysed_date"] 
    ); 
    // you might want to loop throught the original array to get all non-integer key values instead of hard-coding it 
    } 
} 
1
$main = Array ( 
     [788] => Array ([id] => 788) 
     [787] => Array ([id] => 787) 
     [786] => Array ([id] => 786) 
     [785] => Array ([id] => 785) 

     [value_1] => 0 

     [analysed_date] => Array ( 
      [month] => 08 
      [day] => 16 
      [year] => 2011 
     ) 

     [job_id] => 34 
) 

$analysed_date = $main['analysed_date']; 
$value1 = $main['value_1']; 

$result = array(); 
$i=0; 
foreach($main as $key=>$value) 
{ 
if(is_numeric($key) 
{ 
    $result[$i]=array(); 
    $result[$i]['id']=$key; 
    $result[$i]['value_1']=$value1; 
    $result[$i]['analysed_date']=$analysed_date; 
    $i++; 
} 
}