Php 如果已设置,则添加到数组

Php 如果已设置,则添加到数组,php,arrays,isset,Php,Arrays,Isset,有没有更好/更短的方法 每个变量都是一个调用的MySQL表值。我有一个主表和一个覆盖表,所以调用第一个表,提取结果数组,然后调用覆盖表并提取这些结果以覆盖第一个提取 if (isset($Price1)){ $AllPrices[] = $Price1;} if (isset($Price2)){ $AllPrices[] = $Price2;} if (isset($Price3)){ $AllPrices[] = $Price3;} if (isset($Pr

有没有更好/更短的方法

每个变量都是一个调用的MySQL表值。我有一个主表和一个覆盖表,所以调用第一个表,提取结果数组,然后调用覆盖表并提取这些结果以覆盖第一个提取

if (isset($Price1)){
    $AllPrices[] = $Price1;}
if (isset($Price2)){
    $AllPrices[] = $Price2;}
if (isset($Price3)){
    $AllPrices[] = $Price3;}    
if (isset($Price4)){
    $AllPrices[] = $Price4;}
if (isset($SPrice1)){
    $AllPrices[] = $SPrice1;}
if (isset($SPrice2)){
    $AllPrices[] = $SPrice2;}
if (isset($SPrice3)){
    $AllPrices[] = $SPrice3;}   

我过去做过类似的事情,但我不推荐:

$variables = array("Price1", "Price2", "Price3", "Price4", "SPrice1", "SPrice2", "SPrice3");

$AllPrices = array();

foreach ($variables as $variable)
{
    if (isset($$variable))
        $AllPrices[] = $$variable;
}
有关
$$
语法在PHP中如何工作的更多信息,请参阅


但是我同意你的评论。。。你真的应该再看看你是如何得到这些数据的。这个解决方案一点也不理想。

您也可以这样做:

for($i = 1; $i < 4; $i++){
    $current = ${'AllPrices'.$i};
    isset($current) && array_push($AllPrices, $current);
}
($i=1;$i<4;$i++)的
{
$current=${'AllPrices'.$i};
isset($current)和阵列推送($AllPrices,$current);
}

正如上面的答案所示,使用变量名数组更有效。

不建议使用这种结构。

不要使用
$price1、$price2、…
而使用数组-
$price[1]、$price[2]、…
(对$SPrice执行相同操作)

然后您可以使用一个简单的
数组_merge

$AllPrices = array_merge($price, $SPrice);

“所有变量都来自MySQL”这意味着什么?也就是说,这些变量是如何具体设置的?不是真的,看起来您需要检查每个单独的变量,您正在执行的操作。除非这些变量最初是在数组或其他什么东西中……你能给我们看完整的代码吗(比如从DB和循环中提取的部分)?有一种使用变量的方法,但我不推荐。最好是将所有这些变量(如
$Price1
)作为数组键而不是全局变量来创建。每个变量都是一个被调用的表值。我有一个主表和一个覆盖表,所以调用第一个表,提取值,然后调用覆盖并提取这些值以覆盖。然后我运行上面的代码。我认为这是一个很好的解决方案,用于解决您从问题中获得的信息:-)不适用于我正在做的事情(请参阅我的最后一条评论),但这是一个很好的解决方案。