2011-11-30 10 views
11

Eventuali duplicati:
A conditional element inside an array(…) constructSe l'istruzione all'interno di una dichiarazione di array ... è possibile?

Ecco il mio codice

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

posso fare qualcosa di simile ....

qui è il mio errore

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

In realtà ho fatto questo

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

ma ho ancora voglia di sapere f c'è un modo per fare un caso all'interno di questa dichiarazione di matrice

+0

non è possibile inserire un se all'interno di un array come quello. perché non farlo dopo il tuo incarico iniziale? – Julien

+0

stesso problema qui http://stackoverflow.com/questions/4118875/a-conditional-element-inside-an-array-construct – mithunsatheesh

risposta

22

Non è un caso, ma una cosa simile è possibile:

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

Sintassi:

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

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

1

In questo caso solo opzione possibile è quella di utilizzare seguente sintassi:

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

Anche se questo ha effetto collaterale, se la sua condizione non si avrà tasto "SmallImage" con il valore NULL

0

È possibile definire la matrice e quindi aggiungere alcuni elementi:

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

No, si può fare l'esterno sia in linea o:

$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 se smallimage non può essere vuoto:

$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

qual è @ $ product_option_value_description_query-> row ['smallimage'], mean – Trace

+0

Le righe precedute da '@' non generano errori quando si verificano degli avvisi. Quindi, se 'smallimage' non è presente nella matrice' $ product_option_value_description_query-> row', restituirà null e non verrà mostrato nessun errore di avviso – gustavotkg

+0

Nota che se 'Scream' è abilitato la soppressione verrà ignorata. –

3

Forse questo uno?

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

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

$multiarray[] = $array; 
0

Per quanto ne so, no. Ma perché dovresti farlo, è una cattiva idea. Dovresti solo impostare le variabili in un array, fai la logica fuori.

$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. Semplice come quella.

fare:

$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

Anche se si potrebbe fare che è molto più leggibile per aggiungere la condizionale dopo o prima la matrice.

Problemi correlati