数组声明中的If语句..这是可能的吗


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

可能重复:
数组(…(构造中的条件元素

这是我的代码

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

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

中执行if

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

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

也许是这个?

$array = array(
    'key1' => 'value1',
    'key2' => 'value2',
);
if (isset(...)) {
    $array['key3'] = 'value3';
}
$multiarray[] = $array;

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

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

尽管这有副作用,但如果条件失败,您将获得值为NULL 的"smallimage"密钥

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

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

否,您可以内联或外部执行:

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

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

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

。就这么简单。

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

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