Возможно ли, что выражение в объявлении массива... возможно?

Возможный дубликат:
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, есть способ сделать if, если внутри этого объявления массива

Ответ 1

Не, если, но возможно подобное:

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

Ответ 2

Может быть, этот?

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

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

$multiarray[] = $array;

Ответ 3

В этом случае только возможная опция - использовать следующий синтаксис:

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

Хотя это имеет побочный эффект, если ваше условие не работает, у вас будет ключ "smallimage" со значением NULL

Ответ 4

Нет, вы можете сделать это inline или 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'];
}

Ответ 5

Вы можете определить массив, а затем добавить некоторые элементы:

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

Ответ 6

Насколько я знаю, нет. Но почему бы вам это сделать, это плохая идея. Вы должны только устанавливать переменные в массиве, вы логики снаружи.

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

Ответ 7

НЕТ. Просто как это.

делать:

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

Ответ 8

Даже если вы можете сделать это, гораздо удобнее добавить условие после или перед массивом.