更有效的方法来反复设置PHP变量

时间:2013-08-02 00:56:15

标签: php

我很好奇有一种更好的方法来做我下面的代码,我觉得它重复了,并希望减少它,任何建议?

我试图用变量变量做一些事情,但是我没有把它变成工作。

所以基本上我用$_GET[color-name-here']

获得了一堆颜色名称

目标是将颜色代码设置为新颜色的代码。因此,使用网址,我可以将颜色red的代码设置为green的颜色代码,以便red's value成为00FF00

// Get color and color replacement values from URL
// get_value_or is ran through this code...
// isset($_GET[$key]) && !empty($_GET[$key]) ? $_GET[$key] : $default;
$red = get_value_or('red', null);
$orange = get_value_or('orange', null);
$yellow = get_value_or('yellow', null);
$green = get_value_or('green', null);
$turquoise = get_value_or('turquise', null);
$blue = get_value_or('blue', null);
$purple = get_value_or('purple', null);
$pink = get_value_or('pink', null);
$white = get_value_or('white', null);


// Define Default Color Name and Hexcode values
$colorsArray = array(
    'red' => 'FF0000',
    'orange' => 'FF5000',
    'yellow' => 'FFF200',
    'green' => '00FF00',
    'turquoise' => '00F0C8',
    'blue' => '0064FF',
    'purple' => '9F00FF',
    'pink' => 'FF0082',
    'white' => 'FFFFFF'
);



// Iterate Color Array and Set New Color Values if they exist
foreach($colorsArray as $colorName => $colorCode){

    // Do something to set each color Name with a New color code, if that color name has a value set

}


// Right now I am doing it manually for each color name, all 9+ like this...

//Set Reds NEW color value
if(isset($red)){
    $colorsArray['red'] = $colorsArray[$red];
}

//Set oranges NEW color value
if(isset($orange)){
    $colorsArray['orange'] = $colorsArray[$orange];
}

//Set yellows NEW color value
if(isset($yellow)){
    $colorsArray['yellow'] = $colorsArray[$yellow];
}

那么有什么想法如何用更少的代码设置所有颜色?

如果该颜色在URL中使用$ _GET变量设置了新值,则只应更新颜色代码

PS)我不确定这个问题的好标题,如果你有更好的问题,请随时改变它,谢谢

2 个答案:

答案 0 :(得分:5)

如果我是你,我会把作业放在循环中:

$colorsArray = array(
    'red' => 'FF0000',
    'orange' => 'FF5000',
    'yellow' => 'FFF200',
    'green' => '00FF00',
    'turquoise' => '00F0C8',
    'blue' => '0064FF',
    'purple' => '9F00FF',
    'pink' => 'FF0082',
    'white' => 'FFFFFF'
);
foreach ($colorsArray as $colorName => $colorCode) {
    $colorsArray[$colorName] = get_value_or($colorName, $colorCode);
}

它非常整洁,但我不确定它是否适用于您的真实代码。

修改 我更新了代码,因为我意识到数组$color_names是不必要的,你将它们放在$colorsArray的键中。

修改 再次更新了代码,因为循环中的if也是不必要的。

答案 1 :(得分:3)

您可以使用超级全局$GLOBALS访问所有全局变量。所以你可以这样做:

foreach ($colorsArray as $colorName => $colorCode) {
    if (isset($GLOBALS[$colorName]) {
        $colorsArray[$colorName] = $GLOBALS[$colorName];
    }
}

More info about $GLOBALS.