三元运算符上出现意外的T_DOUBLE_ARROW

时间:2017-09-02 15:19:09

标签: php arrays

我在使用三元if运算符设置数组索引时遇到问题。我试图做的是,如果一个语句满足if条件,我想为一个数组添加一个额外的索引,我将用它来插入数据库中的数据。但是,每次我使用三元if运算符来包含这些数组索引时,我总是会收到错误

  

意外' =>' T_DOUBLE_ARROW

这是我的代码:

$data = array('remark' => $this->input->post('remark'),
           'rating' => $this->input->post('rating'),
           ($_SESSION['user_type'] == 'Customer' ? 'user_id' => $_SESSION['id'] : ''),
           ($_SESSION['user_type'] == 'Customer' ? 'food_item_id' => $this->input->post['refid'] : ''));

任何知道如何解决这个问题的人?难道我做错了什么?任何帮助将不胜感激

4 个答案:

答案 0 :(得分:1)

在定义数组时(您的方式)无法有选择地设置索引,但您可以使用array_filter为您删除不需要的索引:

$data = array_filter(array(
    'remark' => $this->input->post('remark'),
    'rating' => $this->input->post('rating'),
    'user_id' => $_SESSION['user_type'] == 'Customer' ? $_SESSION['id'] : '',
    'food_item_id' => $_SESSION['user_type'] == 'Customer' ? $this->input->post['refid'] : '',
));

这样,在分配给$ data变量之前,数组中的所有空字符串值都将被删除。

供参考,见:

答案 1 :(得分:0)

以下是您应该使用它的方式:

$data = array('remark' => $this->input->post('remark'),
           'rating' => $this->input->post('rating'),
           'user_id' => ($_SESSION['user_type'] == 'Customer' ?  $_SESSION['id'] : ''),
           'food_item_id' => ($_SESSION['user_type'] == 'Customer' ?  $this->input->post['refid'] : ''));

答案 2 :(得分:0)

将三元if功能移至=>之后

$data = array(
            'remark'        => $this->input->post('remark'),
            'rating'        => $this->input->post('rating'),
            'user_id'       => $_SESSION['user_type'] == 'Customer' 
                            ? $_SESSION['user_type'] 
                            : '',
            'food_item_id'  => $_SESSION['user_type'] == 'Customer' 
                            ? $this->input->post['refid'] 
                            : ''
            );

答案 3 :(得分:0)

如果要将数据动态添加到数组中,如果条件失败,如果您不希望密钥存在,则不应该使用三元运算符。通过检查定义数组后的条件单独添加它们,如果条件为真,则添加元素。

$data = array('remark' => $this->input->post('remark'),
              'rating' => $this->input->post('rating'));

if ($_SESSION['user_type'] == 'Customer')
    $data['user_id'] = $_SESSION['id'];
if ($_SESSION['user_type'] == 'Customer')
    $data['food_item_id'] = $this->input->post['refid'];

你仍然可以在数组定义中使用三元运算符,但是你仍然可以创建键(即使该元素中的值为空)

$data = array('remark' => $this->input->post('remark'),
              'rating' => $this->input->post('rating'),
              'user_id' => ($_SESSION['user_type'] == 'Customer' ? $_SESSION['id'] : ''),
              'food_item_id' => ($_SESSION['user_type'] == 'Customer' ? $this->input->post['refid'] : ''));