2012-06-06 70 views
3

我有一個多維關聯數組是這樣的:PHP - 轉換多維關聯數組的鍵字符串到數字

$type = Array(
    [unit-1] = Array(
    [taxon-1] = Array(
     [0] = Array(
     [a] = 1, 
     [b] = 1, 
     [c] = 'string1' 
    ), 
     [1] = Array(
     [a] = 1, 
     [b] = 1, 
     [c] = 'string2' 
    ), 
    ), 
    [taxon-2] = Array(
     [0] = Array(
     [a] = 1, 
     [b] = 2, 
     [c] = 'string3' 
    ), 
     [1] = Array(
     [a] = 1, 
     [b] = 2, 
     [c] = 'string4' 
    ), 
    ), 
    [unit-2] = Array(
    [taxon-1] = Array(
     [0] = Array(
     [a] = 2, 
     [b] = 1, 
     [c] = 'string5' 
    ), 
     [1] = Array(
     [a] = 2, 
     [b] = 1, 
     [c] = 'string6' 
    ), 
    ), 
    [taxon-2] = Array(
     [0] = Array(
     [a] = 2, 
     [b] = 2, 
     [c] = 'string7' 
    ), 
     [1] = Array(
     [a] = 2, 
     [b] = 2, 
     [c] = 'string8' 
    ), 
    ), 
) 

如何轉換所有關聯的密鑰(單元1,單元2 ...和類羣-1,taxon-2 ...)分爲序號(0,1 ...和0,1 ...)。我是否需要使用一個foreach循環,如果是的話,它會怎樣?

請注意,陣列中沒有有限數量的單位和分類羣。

回答

9

如果有絕對兩個層面:

$type = array_values(array_map('array_values', $type)); 

要重新指數從陣列中所有的數組鍵:

function array_reindex($array) { 
    if(is_array($array)) { 
     return array_map('array_reindex', array_values($array)); 
    } else { 
     return $array; 
    } 
} 

沒有測試它,但它應該工作。

+1

Splendid。這工作像一個魅力。非常感謝。是的,現在我只需要兩個級別。只是想知道,如果有更多的關卡,它會變得多麼複雜? –

+1

用遞歸重新索引數組的函數更新了我的答案。 – ddlshack

+1

你是個傳奇人物。謝謝。 –

0

您可以使用array_values

+0

事實上,我可以,而且它可以很好地工作,但只適用於第一級密鑰,即單元1,單元2 ...分類鍵不會改變。我怎樣才能利用array_values遞歸地應用到數組中? –