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

2sbarzqh  于 2022-12-21  发布在  PHP
关注(0)|答案(4)|浏览(141)

我有一个包含两个值$arr = ['up', 'down'];的数组,如果有人投了一张赞成票($vote = 'up';),数据库中的up字段应该增加1,down字段应该减少1。
我可以使用if else条件:

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

但我想知道这是否可以做得更短。我想的是一个arr = ['up' => 'down'];,但不幸的是,我没有得到任何与现在。你有什么想法?谢谢!

kwvwclae

kwvwclae1#

解决方案1:

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

解决方案二:

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

hc2pp10m2#

你可以通过使用一些参考数据来简化它。使用$vote值在$voteVals数组中找到一个条目,告诉它在每种情况下增加和减少什么值。然后简单地循环通过投票模型,并通过更新参考数据中指定的数量来操作每个条目。匹配只需要使用"up"和"down"字符串值就可以完成:

$voteVals = ["up" => ["up" => 1, "down" => -1], "down" => ["up" => -1, "down" => 1]];
$voteModel = ["up" => 0, "down" => 0];
$vote = "up";

$voteActionVals = $voteVals[$vote];

foreach ($voteActionVals as $key => $val)
    $voteModel[$key] += $val;

var_dump($voteModel);

输出:
数组(2){["向上"]=〉整数(1)["向下"]=〉整数(-1)}
如您所见,这将"up"条目增加1,"down"值减少1。
实时演示:https://3v4l.org/9oFHH

fd3cxomn

fd3cxomn3#

<?php
function vote($model, $vote) {
    $up = $vote === 'up' ? 1 : -1;
    $model['up'] +=  $up;
    $model['down'] -= $up;
    return $model;
}

$voteModel = [
        'up' => 5,
        'down' =>5
];

print_r(vote($voteModel, 'up'));

print_r(vote($voteModel, 'down'));

https://phpize.online/sql/mysql57/undefined/php/php81/77d709373d4e930e0e0113c11984e0b8/

wribegjk

wribegjk4#

您可以使用以下代码

$voteModel[$vote] += $vote === 'up' ? 1 : -1;

相关问题