是否有更好/更优雅的方法将数组键设置为相关值?

时间:2013-05-03 06:45:51

标签: php arrays

让我们说,我有一个看起来像这样的数组:

Array
(
    [0] => red
    [1] => green
    [2] => blue
)

我希望此数组的键与相关值相同。所以结果应该是这样的:

Array
(
    [red] => red
    [green] => green
    [blue] => blue
)

初始数组的值将是唯一的,因此这不是问题。

要获得结果,我通常会使用foreach循环:

$aResult = array();
foreach($aColors as $sValue)
{
  $aResult[$sValue] = $sValue;
}

我的问题是:有更好/更优雅的方法吗?

修改 很多人都想知道为什么我需要这样的数组。所以我会解释一下。我正在使用一个框架,它为我生成一个选择框。该函数使用数组键和值将它们应用于选择选项,如下所示:

<select>
  <option value="red">red</option>
  <option value="green">green</option>
  <option value="blue">blue</option>
</select>

在这种情况下,键会匹配值。

2 个答案:

答案 0 :(得分:4)

$aResult = array_combine($aColours, $aColours);

但这样做毫无意义,因为它没有给你原始阵列没有给你的任何东西。

修改

您可能还会发现以下变体很有用:

$aColours = array('red','orange','yellow','green','blue','indigo','violet');

$aResult = array_combine(
    $aColours,
    array_map(
        'ucfirst',
        $aColours
    )
);

var_dump($aResult);

使用初始数组中为键定义的小写值,但为显示值生成大写的第一个字母

$aColours = array('Red','Orange','Yellow','Green','Blue','Indigo','Violet');

$aResult = array_combine(
    array_map(
        'strtolower',
        $aColours
    ),
    $aColours
);

var_dump($aResult);

使用初始数组中为值定义的混合大小写显示值,但为键生成小写

答案 1 :(得分:2)

不,没有。

问题仍然是你想要它的原因,但这是实现它的方法。