搜尋

首頁  >  問答  >  主體

在 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粉710478990506 天前616

全部回覆(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
  • 取消回覆