我有一个变量$ width,可以是包含以下任何一个值的字符串:
最短,短,半,长,最长
在我的模板中,我想创建2个元素 - 一个原始值为$ width,另一个宽度相反:
这是我的代码,它正如我想要的那样工作,但它感觉有点重复和脏,所以我想知道是否存在更清晰/更智能的PHP语法来存储相反的字符串对并重构/缩短代码还是尽可能精益?
<?
// Possible values - shortest, short, half, long, longest
$width = '';
if ($width == 'shortest') {
$opposite_width = 'longest';
}
if ($width == 'short') {
$opposite_width = 'long';
}
if ($width == 'half') {
$opposite_width = 'half';
}
if ($width == 'long') {
$opposite_width = 'short';
}
if ($width == 'longest') {
$opposite_width = 'shortest';
}
?>
<div class="<?= width ?>"></div>
<div class="<?= opposite_width ?>"></div>
谢谢。
答案 0 :(得分:7)
这是一个如何将数组用作地图的小例子:
$widthMap = [
'shortest' => 'longest',
'short' => 'long',
'half' => 'half',
'long' => 'short',
'longest' => 'shortest'
];
$width = 'short';
$widthOpposite = $widthMap[$width];
在您的代码中应该非常容易使用。
这可以进一步优化,因为您可以在一个地图中同时使用两个方向,当您还可以将array_flip
用于另一个方向时,但在这种情况下,只需几个值就可以更简单。
答案 1 :(得分:5)
Here is one method without array mapping:
// Possible values - shortest, short, half, long, longest
function opposite($width) {
$widths = array('shortest', 'short', 'half', 'long', 'longest');
$widthCount = count($widths) - 1;
$position = array_search($width, $widths);
$newPosition = $widthCount - $position;
$oppositePosition = $widths[$newPosition];
return $oppositePosition;
}
echo opposite('half'); // 'half'
计算数组我不必担心制作地图,这意味着我可以添加到数组而无需修改函数。这可以通过传入needle和haystack进一步修改,这意味着该函数可以使用多个数据集(任何大小的数组)而无需修改。
function opposite($width, $oppositeOf) {
$widthCount = count($oppositeOf) - 1;
$position = array_search($width, $oppositeOf);
$newPosition = $widthCount - $position;
$oppositePosition = $oppositeOf[$newPosition];
return $oppositePosition;
}
$widths = array('shortest', 'short', 'half', 'long', 'longest');
echo opposite('long', $widths); // 'short'
$sizes = array('skinnier', 'skinny', 'average', 'above average', 'hefty', 'heftier');
echo opposite('above average', $sizes); // 'average'
答案 2 :(得分:4)
您可以制作具有相反值的数组,类似于普通的地图 - &gt;相反。简单的实施:
function getOpposite($word) {
$map = [
'shortest' => 'longest',
'short' => 'long',
'half' => 'half'
];
if(isset($map[$word])) {
return $map[$word];
}
//reverse finding
$flippedMap = array_flip($map);
if(isset($flippedMap[$word])) {
return $flippedMap[$word];
}
return null;
}
现在您可以在视图中使用功能:
<div class="<?= $width ?>"></div>
<div class="<?= getOpposite($width) ?>"></div>