2011-11-30 8 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

このような配列の中にifを置くことはできません。なぜあなたの最初の割り当ての後でそれをしないのですか? – 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 docs:[三項演算子](http://php.net/manual/ja/) language.operators.comparison.php#language。 – Wiseguy

1

唯一可能なオプションは、次の構文を使用することである。この場合:

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

これは副作用がありますが、あなたの条件に障害が発生した場合、あなたはあなたが定義することができNULL

0

の値を持つ「smallimage」キーを持っていますその後、アレイといくつかの項目を追加:いいえ、あなたはインラインまたはexternalyそれを行うことができます

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

を:

$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

を意味します。プレフィックスが '@ 'の行は、通知が発生してもエラーを発生しません。したがって、 'smallimage'が' $ product_option_value_description_query-> row'配列に存在しない場合、nullを返し、通知エラーは表示されません。 – gustavotkg

+0

ただし、 'Scream'が有効な場合、抑制は無視されます。 –

3

この1?

$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

あなたはそれが配列の後または前に条件を追加するためにはるかに読み取り可能であることを行うことができたとしても。

関連する問題