PHP:如何有选择地翻转数组键/值对?

时间:2012-01-16 18:28:32

标签: php arrays

将数组定义为...

    $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
    )

请注意,键是字符串值而不是数字。 OR 这些值为null是可以接受的。例如[BROWN] => ''。 到目前为止,我能想到的只有array_flip,但我无法有选择地使用它。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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]);
            }
        }
    }
}