2011-08-16 70 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++; 
} 
}