【问题标题】:If statement within an array declaration ...is that possible? [duplicate]数组声明中的 if 语句……这可能吗? [复制]
【发布时间】:2011-11-30 17:02:56
【问题描述】:

可能重复:
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']
);

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

【问题讨论】:

标签: php arrays if-statement


【解决方案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)
    

    虽然这有副作用,但如果您的条件失败,您将拥有值为 NULL 的“smallimage”键

    【讨论】:

    • 我确实喜欢这个答案,但是三元的“真”值(这里,“isset($product_option_value_description_query->row['smallimage'])”显示值为 1,表示真。如果您希望显示的值为 smallimage,请将其更改为“$product_option_value_description_query->row['smallimage']”。
    【解决方案4】:

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

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

    【讨论】:

    • 效果很好 - 谢谢!!!
    【解决方案5】:

    不,您可以内联或外接:

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

    【讨论】:

    • @$product_option_value_description_query->row['smallimage'] 是什么意思
    • @ 为前缀的行在出现通知时不会引发错误。因此,如果 smallimage 不存在于 $product_option_value_description_query-&gt;row 数组中,它将返回 null 并且不会显示通知错误
    • 但是请注意,如果启用了“尖叫”,则抑制将被忽略。
    • 对于多维数组,请添加位置以附加值,即$product_option_value_data[sizeof($product_option_value_data-1)]['smallimage'] = $product_option_value_description_query-&gt;row['smallimage'];
    【解决方案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】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-23
          • 1970-01-01
          • 2013-05-29
          • 2015-07-24
          • 2013-01-15
          • 2013-02-16
          相关资源
          最近更新 更多