我想出了這個。它有點詳細,但它,它的工作..
function rtlPadding($string)
{
if (preg_match_all('~([0-9]+(px|%)?)~i', $string, $matches))
{
$c = count($matches['1']);
$p = $matches['1'];
if ($c == 4)
$order = implode(' ', array($p['0'], $p['3'], $p['2'], $p['1']));
else if ($c == 3)
$order = implode(' ', array($p['0'], 0, $p['2'], $p['1']));
else
$order = implode(' ', $p);
return 'padding: ' . $order . ';';
}
return false;
}
我測試了它,它似乎工作得很好,至少與你給的數據。
$paddings = array(
'padding: 1px 2px;' => 'padding: 1px 2px;',
'padding: 0 2px 4px;' => 'padding: 0 0 4px 2px;',
'padding: 1px 0 3px 4px;' => 'padding: 1px 4px 3px 0;',
'padding: 1px 2px 0 4px;' => 'padding: 1px 4px 0 2px;',
'padding: 1px 2px 3px 0;' => 'padding: 1px 0 3px 2px;'
);
foreach ($paddings as $given => $expected)
{
$return = rtlPadding($given);
if ($return === $expected)
echo 'Everything OK!' . PHP_EOL;
else
echo 'Error! Expected ' . $expected . ' Got ' . $return . PHP_EOL;
}
// Output: Everything Ok, 5 times :D
似乎不錯,但此行'填充:2px的0 4px'應該是'填充:0 0 4PX 2px',如果有這樣的'填充負數:-1px 0 3px的4px'它不行 ! –
@MSamir:你無法在一種模式中做到這一點!您必須首先在4個參數規則中轉換3個參數規則(添加0)。對於負面參數,你可以很容易地添加一個條件 - –
好吧,這很好,謝謝。 –