2011-11-30 9 views
11

Duplicar posible:
A conditional element inside an array(…) constructSi la declaración dentro de una declaración de matriz ... ¿es posible?

Aquí está mi código

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

¿Puedo hacer algo como esto ....

aquí es mi error

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

En realidad lo hice

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

pero todavía quiero saber f hay una manera de hacer un if dentro de esta declaración de matriz

+0

no se puede poner un si dentro de una matriz como esa. ¿por qué no solo hacerlo después de su asignación inicial? – Julien

+0

mismo problema aquí http://stackoverflow.com/questions/4118875/a-conditional-element-inside-an-array-construct – mithunsatheesh

Respuesta

22

No es un si, pero una cosa similar es posible:

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

sintaxis:

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

PHP docs: [operador ternario] (http://php.net/manual/en/ language.operators.comparison.php # language.operators.comparison.ternary) – Wiseguy

1

En este caso sólo es posible opción es utilizar siguiente sintaxis:

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

Aunque esto no tiene efectos secundarios, si su condición de falla que tendrá tecla "SmallImage" con un valor de NULL

0

Se puede definir la matriz y luego añadir algunos elementos:

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

No, puede hacerlo en línea o 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'] 
); 

O si smallimage no puede estar vacía:

$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

cuál es la @ $ product_option_value_description_query-> row ['smallimage'], medio – Trace

+0

Las líneas con el prefijo '@' no generarán errores cuando se produzcan avisos. Por lo tanto, si 'smallimage' no está presente en la matriz' $ product_option_value_description_query-> row', devolverá nulo y no se mostrará ningún error de notificación. – gustavotkg

+0

Sin embargo, si se activa 'Scream', se ignorará la supresión. –

3

Tal vez éste?

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

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

$multiarray[] = $array; 
0

Por lo que yo sé, no. Pero por qué incluso harías eso, esa es una mala idea. Solo deberías establecer variables en una matriz, haz lógica afuera.

$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. Simple como eso.

hacer:

$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

Incluso si se pudiera hacer que es mucho más fácil de leer para agregar el condicional después o antes de la matriz.

Cuestiones relacionadas