php 数组声明中的 if 语句......这可能吗?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/8329897/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 04:27:29  来源:igfitidea点击:

If statement within an array declaration ...is that possible?

phparraysif-statement

提问by Matt Elhotiby

Possible Duplicate:
A conditional element inside an array(…) construct

可能的重复:
array(...) 结构中的条件元素

Here is my code

这是我的代码

$product_option_value_data[] = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    if (isset($product_option_value_description_query->row['smallimage'])) {
        'smallimage'                  => $product_option_value_description_query->row['smallimage'],
    }
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

can i do something like this....

我可以做这样的事情......

here is my error

这是我的错误

  Parse error: syntax error, unexpected T_IF, expecting ')' in /Users/mattelhotiby/Sites/posnation/shop_pos/catalog/model/catalog/product.php on line 419 

Actually i did this

其实我是这样做的

if (isset($product_option_value_description_query->row['smallimage'])) {
    $smallimage = $product_option_value_description_query->row['smallimage'];
}else{
    $smallimage = '';
}
$product_option_value_data[] = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    'smallimage'                  => $smallimage,
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

But i still want to know f there is a way to do an if within this array declaration

但我仍然想知道在这个数组声明中有一种方法可以做一个 if

回答by Tom van der Woerdt

Not an if, but a similar thing is possible:

不是如果,但类似的事情是可能的:

$product_option_value_data[] = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    'smallimage' => (isset($product_option_value_description_query->row['smallimage'])) ?
        $product_option_value_description_query->row['smallimage'] : null,
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

Syntax:

句法:

(<statement> ? <case: true> : <case: false>)
(1 == 1 ? 'yes!' : 'PHP is wrong')

回答by balkon_smoke

Maybe this one?

也许是这个?

$array = array(
    'key1' => 'value1',
    'key2' => 'value2',
);

if (isset(...)) {
    $array['key3'] = 'value3';
}

$multiarray[] = $array;

回答by Darkry

You can define the array and then add some items:

您可以定义数组,然后添加一些项目:

$des = array(...);
if(...)
   $des["..."] = "...";

回答by gustavotkg

No, You can do it inline or externaly:

不,您可以内联或外部进行:

$product_option_value_data[] = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    'smallimage'                  => @$product_option_value_description_query->row['smallimage'],
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

Or if smallimagecannot be empty:

或者如果smallimage不能为空:

$product_option_value_data[] = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

if (isset($product_option_value_description_query->row['smallimage'])) {
    $product_option_value_data['smallimage'] = $product_option_value_description_query->row['smallimage'];
}

回答by ioseb

In this case only possible option is to use following syntax:

在这种情况下,唯一可能的选择是使用以下语法:

'smallimage' => (isset($product_option_value_description_query->row['smallimage']) 
  ? isset($product_option_value_description_query->row['smallimage'])
    : NULL)

Though this has side effect, if your condition fails you will have "smallimage" key with value of NULL

虽然这有副作用,但如果您的条件失败,您将拥有值为 NULL 的“smallimage”键

回答by David Nguyen

As far as I know, no. But why would you even do that, that is a bad idea. You should only be setting variables in an array, do you logic outside.

据我所知,没有。但是你为什么要这样做,那是个坏主意。你应该只在数组中设置变量,你在外面做逻辑。

$data = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

if (isset($product_option_value_description_query->row['smallimage'])) {
    $data['small_image'] = $product_option_value_description_query->row['smallimage'];
}

$product_option_value_data[] = $data;

回答by DaveRandom

NO. Simple as that.

。就那么简单。

Do:

做:

$product_option_value_data[] = array(
    'product_option_value_id' => $product_option_value['product_option_value_id'],
    'name'                    => $product_option_value_description_query->row['name'],
    'price'                   => $product_option_value['price'],
    'prefix'                  => $product_option_value['prefix']
);

if (isset($product_option_value_description_query->row['smallimage'])) {
     $product_option_value_data[count($product_option_value_data) - 1]['smallimage'] = $product_option_value_description_query->row['smallimage'],
     // I'm not sure if you meant to have that [] in your declaration above
     // You may need to drop it, in which case the line would be:
     // $product_option_value_data['smallimage'] = $product_option_value_description_query->row['smallimage'],
}

回答by dm03514

Even if you could do that it is much more readable to add the conditional after or before the array.

即使您可以这样做,在数组之后或之前添加条件也更具可读性。