2012-01-16 49 views
1

與定義爲陣列...PHP:我如何有選擇地觸發數組鍵/值對?

$my_array = array (
     'a' => array('BROWN'), 
     'b' => array('GREEN', 'MIN_LEN' => 2, 'MAX_LEN' => 60, 'SOMETHING') 
    ); 

它看起來像......

[a] => Array 
    (
     [0] => BROWN 
    ) 

[b] => Array 
    (
     [0] => GREEN 
     [MIN_LEN] => 2 
     [MAX_LEN] => 60 
     [1] => SOMETHING 
    ) 

如何可以我將其轉換爲...

[a] => Array 
    (
     [BROWN] => BROWN 
    ) 

[b] => Array 
    (
     [GREEN] => GREEN 
     [MIN_LEN] => 2 
     [MAX_LEN] => 60 
     [SOMETHING] => SOMETHING 
    ) 

通知的鍵字符串值而不是數字。 值可以接受爲空。例如[BROWN] =>''。 到目前爲止,我所能想到的只有array_flip,但我無法有選擇地使用它。

回答

5
foreach ($my_array as $oKey => $oVal) { 
    foreach ($oVal as $iKey => $iVal) { 
    if (!is_string($iKey) && is_string($iVal)) { 
     $my_array[$oKey][$iVal] = $iVal; 
     unset($my_array[$oKey][$iKey]); 
    } 
    } 
} 

See it working

+0

難道你不想檢查'!is_string'嗎? – sdleihssirhc 2012-01-16 18:33:17

+0

@sdleihssirhc的確,我確實修復了 – DaveRandom 2012-01-16 18:33:41

+0

+1的「See it working」鏈接。 – Isius 2012-01-17 00:21:00

0

你會需要一個用戶定義的函數。例如:

function selective_flip(&$arr) { 
    foreach($arr as &$subarr) { //loops through a and b 
     foreach($subarr as $key => $value) { 
      if(is_string($value)) { 
       $subarr[$value] = $value; 
       unset($subarr[$key]); 
      } 
     } 
    } 
} 
+0

此代碼似乎可用於第一次數組迭代,但隨後使用數字鍵清除數組值。 – Isius 2012-01-16 23:30:11

+0

@Isius引用可能有些古怪。我會研究它,但如果我沒有找到任何你已經有一個工作解決方案。 – 2012-01-17 02:23:56