Использование if else внутри массива-php

#php #arrays

#php #массивы

Вопрос:

будучи новичком в php, я не могу понять, как использовать if else внутри php array. я пытался сделать что-то вроде этого

 function column_title($item){
        $status=false;
        if($item->uTestimonials_approval =='0')
           $status=false;
         else
          $status=true;

        //Build row actions
        $actions = array(
             $status ? 'unapprove'      => sprintf('<a href="?page=%samp;action=%samp;id=%s">Unapprove</a>',$_REQUEST['page'],'unapprove',$item-> uTestimonials_id),:
            'approve1'      => sprintf('<a href="?page=%samp;action=%samp;id=%s">Approve</a>',$_REQUEST['page'],'approve',$item-> uTestimonials_id),

            'delete'    => sprintf('<a href="?page=%samp;action=%samp;id=%s">Delete</a>',$_REQUEST['page'],'delete',$item-> uTestimonials_id),
        );

        //Return the title contents
        return sprintf('%1$s <span style="color:silver">(id:%2$s)</span>%3$s',
            /*$1%s*/ $item-> uTestimonials_message,
            /*$2%s*/ $item-> uTestimonials_id,
            /*$3%s*/ $this->row_actions($actions)
        );
    }
  

но я получаю следующее исключение при разборе

 Parse error: syntax error, unexpected T_DOUBLE_ARROW
  

может ли кто-нибудь помочь мне найти, что именно я делаю неправильно, заранее спасибо

Я прекрасно отношусь к отрицательному голосованию, но всегда лучше указать, почему кто-то это сделал, чтобы этот человек мог улучшить себя

Комментарии:

1. Что вы намеревались сделать, выполнив $status ? ‘не одобрять’?

2. @Jeune я работаю над некоторыми функциями WordPress и, основываясь на статусе утверждения, мне нужно показать определенный текст для использования, поэтому я использую это.

3. Чтобы вы знали, весь ваш код, со всем этим sprintf и ternary, крайне нечитаемым

Ответ №1:

Вы не можете сделать это для значения ключа:

  $status ? 'unapprove'
  

Попробуйте что-то вроде этого вместо:

     //Build row actions
    $ap = 'approve';
    $key = 'approve1';
    if($status){             
       $ap = 'unapprove';
       $key = 'unapprove';
    }
    $actions = array(
        $key => sprintf('<a href="?page=%samp;action=%samp;id=%s">'.$ap.'</a>',$_REQUEST['page'],$ap,$item-> uTestimonials_id),:
        'delete' => sprintf('<a href="?page=%samp;action=%samp;id=%s">Delete</a>',$_REQUEST['page'],'delete',$item-> uTestimonials_id),
    );
  

Комментарии:

1. любая идея, как я могу достичь желаемого, поскольку я должен использовать ключ и значение против него

2. @user как насчет обычной установки переменной if перед кодом определения массива, а?

3. @Coll .Shrapnel Я добавил это ^_^

4. Нет необходимости делать это, вы можете использовать сокращенную запись для ключа массива. Он просто не указал его часть else, поэтому он выдавал ошибку.

5. @Interstellar_Coder посмотрите на код операции, else было указано, но не в том месте.

Ответ №2:

Вы не можете сделать это внутри определения массива.

Вместо этого вы могли бы добавить их в массив после определения следующим образом:

 $actions = array(
    'delete'    => sprintf('<a href="?page=%samp;action=%samp;id=%s">Delete</a>',$_REQUEST['page'],'delete',$item-> uTestimonials_id),
);

if ($status) {
    $actions['unapprove'] = sprintf('<a href="?page=%samp;action=%samp;id=%s">Unapprove</a>',$_REQUEST['page'],'unapprove',$item-> uTestimonials_id);
}
else {
    $actions['approve'] = sprintf('<a href="?page=%samp;action=%samp;id=%s">Approve</a>',$_REQUEST['page'],'approve',$item-> uTestimonials_id);
}