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