首页  >  问答  >  正文

在 PHP 数组中的两个字符串之间切换

<p>我有一个包含两个值的数组 <code>$arr = ['up', 'down'];</code>。如果有人投了赞成票(<code>$vote = 'up';</code>),则数据库中的 up 字段应增加 1,down 字段应减少 1。</p> <p>我可以使用 if else 条件:</p> <pre class="brush:php;toolbar:false;">if ($vote === 'up') { $voteModel['up'] = $voteModel['up'] + 1; $voteModel['down'] = $voteModel['down'] - 1; } else { $voteModel['up'] = $voteModel['up'] - 1; $voteModel['down'] = $voteModel['down'] + 1; } </pre> <p>但我想知道是否可以缩短这个时间。我正在考虑 <code>arr = ['up' => 'down'];</code> 但不幸的是我现在没有任何进展。你有什么想法?谢谢!</p>
P粉710478990P粉710478990382 天前523

全部回复(2)我来回复

  • P粉029327711

    P粉0293277112023-09-05 12:26:32

    虽然您要求更短,但有时我认为更清晰更好。大多数其他答案都包括额外的数组或三元组,它们完全没问题并且 100% 有效,但我认为代码的意图并不那么明显。对我来说,我会保留 if 并仅使用 ++-- 进行递增和递减。我认为“业务规则”非常明显,代码读起来也很干净。

    再一次,不完全是你所要求的,只是我的两分钱。

    if ('up' === $vote) {
        $voteModel['up']++;
        $voteModel['down']--;
    } else {
        $voteModel['up']--;
        $voteModel['down']++;
    }
    

    回复
    0
  • P粉166779363

    P粉1667793632023-09-05 00:11:58

    解决方案1:

    $arg = $vote === 'up' ? [1,-1] : [-1,1];
    $voteModel['up'] += $arg[0];
    $voteModel['down'] += $arg[1];

    解决方案2:

    $voteModel['up'] += ($vote === 'up' ? 1 : -1);
    $voteModel['down'] += ($vote !== 'up' ? 1 : -1);

    解决方案 3(如果 $voteModel 中“up”为索引 1,“down”为索引 0):

    $voteModel[$vote==='up']++;
    $voteModel[$vote==='down']--;

    解决方案 3b(如果我们想保留关联键):

    $arr = ['down','up'];
    $voteModel[$arr[$vote==='up']]++;
    $voteModel[$arr[$vote==='down']]--;

    回复
    0
  • 取消回复