我的数据库中有以下轮胎尺寸,所有轮胎尺寸都以不同的方式进行。以下是一些例子:
225/50R17
255/45R18/XL
P155/80R13
我需要的是将它们分成3个部分,并且只是数字。
所以第一个应该是: 225/50/17 所有单独的变量。 第二个应该是: 255/45/18 并忽略XL。第三个显然应该 155/80/13
有没有人知道如何编写一个函数或者需要做些什么来获取这些数字?
谢谢!
答案 0 :(得分:3)
你可能想要这样的东西:
$ar = array( '225/50R17', '255/45R18/XL', 'P155/80R13' ); foreach ($ar as $a) { if (preg_match_all('/(\d+)/', $a, $match)) { print "match=[". print_r($match[0], true) . "]\n"; } } ?>
产生如下输出:
{{1}}
答案 1 :(得分:2)
您可以使用preg_split()
功能:
$str = '255/45R18/XL';
$chars = preg_split('/[^\d]/', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
这导致:
Array
(
[0] => 255
[1] => 45
[2] => 18
)
你可能希望在那里有PREG_SPLIT_NO_EMPTY
标志,否则你最终会得到数组中的空元素。
你实际上是在分割不是数字的字符,所以preg_split()
似乎是自然的选择。
答案 2 :(得分:0)
答案 3 :(得分:0)
您可以使用正则表达式执行此操作:
$text = "255/45R18/XL";
$matches = array();
preg_match_all("/(\d+)/", $text, $matches);
var_dump($matches);
在preg_match_all之后,$ match将如下所示:
array(4) {
[0]=>
string(12) "255/45R18/XL"
[1]=>
string(3) "255"
[2]=>
string(2) "45"
[3]=>
string(2) "18"
}
答案 4 :(得分:0)
http://sandbox.phpcode.eu/g/3cb0f
<?php
$string = '225/50R17';
$filtered = preg_replace('~[a-z]+~i', '/', $string);
$exploded = explode('/', $filtered);
foreach($exploded as $one){
if (!empty($one)){
echo "<b> ".$one."</b>";
}
}
答案 5 :(得分:0)
提供它总是一个R分割数字,这个代码应该工作(未经测试):
$string = // Get the current row from the database
// Replace all occurences of `R` with a `/`
str_replace("R", "/", $string);
// Remove any letters
$string = preg_replace("/[a-zA-Z]/i", "");
// Split string into an array
$numbers = explode("/", $string);
// Get rid of any empty elements
foreach($numbers as $index => $value)
{
if(empty($value))
{
unset($numbers[$value]);
}
}
可能有更好的方法,但这应该适用于大多数情况,如果不是所有情况。
请记住,这只适用于一行,应该放在MySQL while()
循环或其他任何内容中。然后,您可以将$numbers
附加到包含所有轮胎尺寸的阵列或您想要做的任何事情。
答案 6 :(得分:0)
没有正则表达式的一种方法,以防你的字符串不可预测
function remove_crap ($crapString) {
//build an alphabet array
for ($character = 65; $character < 91; $character++) {
$potentialCrap[] = chr($character);
}
//throw in slash or whatever other crap there might be with the numbers
$potentialCrap[] = "/";
//strip out all potential crap
$newString = str_replace($potentialCrap, '', $crapString);
//readd the slashes where they go, totally better ways to do this but i'm tired and want to go home
$finalString = $newString[0].$newString[1].$newString[2]."/".$newString[3].$newString[4]."/".$newString[5].$newString[6];
return $finalString;
}
答案 7 :(得分:0)
这对我有用
<?php
$s = "145/80R13";
$x = preg_split('/\/|[a-z]|[A-Z]|-| /', $s);
print_r($x);
&GT;