2011-08-18 36 views
-2

我有下面的源數組,我試圖重組使用group_name給我下面的require輸出。重組數組在php中

任何幫助或指針讚賞。 謝謝,路

來源:

Array 
(
[field_a] => Array 
    (
     [type] => text 
     [group_name] => 
    ) 

[field_b] => Array 
    (
     [type] => number_integer 
     [group_name] => group_other 
    ) 

[field_c] => Array 
    (
     [type] => text 
     [group_name] => 
    ) 

[field_d] => Array 
    (
     [type] => link 
     [group_name] => group_web_links 
    ) 

[field_e] => Array 
    (
     [type] => link 
     [group_name] => group_web_links 
    ) 

[field_f] => Array 
    (
     [type] => text 
     [group_name] => group_web_links 
    ) 

) 

輸出:

Array 
(
[group_other] => Array 
    (
     [field_b] => Array 
      (
       [type] => number_integer 
       [group_name] => group_other 
      ) 
    ) 

[group_web_links] => Array 
    (
     [field_d] => Array 
      (
       [type] => link 
       [group_name] => group_web_links 
      ) 

     [field_e] => Array 
      (
       [type] => link 
       [group_name] => group_web_links 
      ) 

     [field_f] => Array 
      (
       [type] => text 
       [group_name] => group_web_links 
      ) 
    ) 

[field_a] => Array 
    (
     [type] => text 
     [group_name] => 
    ) 

[field_c] => Array 
    (
     [type] => text 
     [group_name] => 
    ) 
) 

回答

-2

如果新的數組的鍵順序不是那麼重要:

$new_array = array(); 
foreach ($old_array as $key => $value) { 
    if (empty($value['group_name'])) $new_array[$key] = $value; 
    else { 
     if (!array_key_exists($value['group_name'], $new_array) $new_array[$value['group_name']] = array(); 
     $new_array[$value['group_name']][$key] = $value; 
    } 
} 
-1

這可以通過完成簡單foreach循環:

$start_array; // The array you want to convert 
$end_array = array(); // The final array 
foreach ($start_array as $index => $value) { 
    if (empty($value["group_name"])) { 
     $end_array[$index] = $value; 
    } else { 
     $end_array[$value["group_name"]][$index] = $value; 
    } 
} 
+0

OP需要數組作爲目標數組的值。有了這個,你只會得到一個值。 – J0HN

-2

事情是這樣的:

$array_dst = array(); 
foreach ($array_src as $group_key=>$group_data){ 
    $group_name = $group_data['group_name']; 
    if (empty($array_dst[$group_name])) 
     $array_dst[$group_name] = array(); 
    $array_dst[$group_name][$group_key] = $group_data; 
} 
+0

您忘記了,沒有給出'group_name'的條目沒有正確插入您的解決方案 – rabudde

+0

爲什麼? :)它接收空值,並照常插入。試試這個'$ array = array('group_name'=>''); $ name = $ array ['group_name']; $ new_array [$ name] = 123; var_dump($ new_array);' – J0HN

-2
$new_array = array(); 
foreach($old_array as $field_id => $field) { 
    if($field[ 'group_name' ] == '') { 
     $new_array[ $field_id ] = $field; 
    } else { 
     $new_array[ $field[ 'group_name' ] ][ $field_id ] = $field; 
    } 
} 

我想那些誰反對投票這個正在做,是因爲我不初始化$new_array[ $field[ 'group_name' ] ]。那麼,這在PHP中不是必需的,當您執行$new_array[ $field[ 'group_name' ] ][ $field_id ] = $field;時,它將自動使用空數組進行初始化。

+0

您忘記了,沒有給定'group_name'的條目沒有正確插入您的解決方案 – rabudde

+0

是的,您是對的,更正了代碼。 – nobody