我有一個數字字符串,我需要將它分成兩組,從右側開始,但不超過三個組。php preg分割一個字符串
要理解,這三組是「銅」,「銀」和「黃金」,起始價值是合成金額。例如:
10 - > 10銅
1010 - > 10銀和10銅
102030 - > 10金,20銀和30銅
1234567891010 - > 123456789金,10銀和10銅
如何在PHP中做到這一點?
我有一個數字字符串,我需要將它分成兩組,從右側開始,但不超過三個組。php preg分割一個字符串
要理解,這三組是「銅」,「銀」和「黃金」,起始價值是合成金額。例如:
10 - > 10銅
1010 - > 10銀和10銅
102030 - > 10金,20銀和30銅
1234567891010 - > 123456789金,10銀和10銅
如何在PHP中做到這一點?
我只是將字符串轉換爲int類似here然後做一些算術操作。
設X是數量
r1 = x % 10000;
gold = x/10000;
copper = r1 % 100;
silver = r1/100;
所以你把所有的信息。
凡%
裝置modulo
哦,是的,這是比拆分字符串要簡單得多! 我沒有得到這個%的東西,但我已經用floor()來截斷十進制值 謝謝 –
%意味着模數,所以對於例如5%2是3,所以如果您將5分爲2,則其餘的爲3。另一個示例是:1002%10爲2,因此1002 = 100 * 10 + 2 –
@the_nutria以下是文檔:http:// php .net/manual/zh/language.operators.arithmetic.php – Jelmer
Regex的溶液:
$tests = array("10", "2010", "302010", "3030302010");
foreach($tests as $test) {
preg_match('@^(?:(\d*)(\d\d))?(\d\d)[email protected]', $test, $match);
$copper = array_pop($match);
$silver = array_pop($match);
$gold = array_pop($match);
echo sprintf("%10s %10s %10s %10s\n", $test, $gold, $silver, $copper);
}
// 10 10
// 2010 20 10
// 302010 30 20 10
// 3030302010 303030 20 10
那是什麼「非正則表達式」? –
@maček:修改答案(再次) –
使用正則表達式:
$items = array('12', '1234', '123456', '1234567891234');
foreach ($items as $item)
{
echo $item;
preg_match('/^(?:(?<gold>\d*)(?<silver>\d\d))?(?<copper>\d\d)$/', $item, $result);
foreach ($result as $key => $value)
{
if (is_int($key))
{
unset($result[$key]);
}
}
var_dump($result);
}
100是否銅= 1銀100銀= 1個金? – Michael
preg_split($ pattern,$ subject)但是我不知道要寫什麼模式...... :( –
正如@Michael所說的我會用數學而不是正則表達式,把它全部保存在銅中,然後將它轉換成黃金,銀和銅 –