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
If statement within an array declaration ...is that possible?
提问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 smallimage
cannot 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.
即使您可以这样做,在数组之后或之前添加条件也更具可读性。