2011-11-30 38 views
11

可能重复:
A conditional element inside an array(…) construct如果数组声明中的语句是可能的?

这里是我的代码

$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'] 
); 

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

这里是我的错误

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

其实我这样做

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'] 
); 

但我还是想知道F时,是一种方法,这个数组声明中,如果做的不是一个,如果

+0

你不能把一个如果这样的数组内。为什么不在你最初的任务之后做呢? – Julien

+0

同样的问题在这里http://stackoverflow.com/questions/4118875/a-conditional-element-inside-an-array-construct – mithunsatheesh

回答

22

,但类似的事情是可能的:

$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'] 
); 

语法:

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

PHP文档:[三元运算符](http://php.net/manual/en/ language.operators.comparison.php#语言。operators.comparison.ternary) – Wiseguy

1

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

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

虽然这有副作用,如果条件不满足,你将有“smallimage”与NULL

的价值关键
0

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

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

没有,您可以在线或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'] 
); 

或者,如果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']; 
} 
+0

什么是@ $ product_option_value_description_query-> row ['smallimage'],意思是 – Trace

+0

以'@'为前缀的行不会在发生通知时引发错误。因此,如果'$ product_option_value_description_query-> row'数组中没有'smallimage',它将返回null,并且不会显示通知错误 – gustavotkg

+0

但是请注意,如果'Scream'被启用,则忽略该抑制。 –

3

也许这一个?

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

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

$multiarray[] = $array; 
0

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

$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; 
0

NO。就那么简单。

做:

$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'], 
} 
0

即使你能做到这一点它是更可读添加后或前阵的条件。