我有这样的变量:
$path1 = "<span class='span1' data-id=2>lorem ipsum</span>";
$path2 = "<span class='span2' data-id=14>lorem ipsum</span>";
我需要获得data-id
的价值,但我认为这在php中是不可能的。
也许可以获得字符串中的最后一个整数? 类似的东西:
$a = $path1.lastinteger(); // 2
$b = $path2.lastinteger(); // 14
任何帮助?
答案 0 :(得分:2)
您可以使用简单的正则表达式:
/data-id=[\"\']([1-9]+)[\"\']/g
然后你可以建立这个功能:
function lastinteger($item) {
preg_match_all('/data-id=[\"\']([1-9]+)[\"\']/',$item,$array);
$out = end($array);
return $out[0];
}
工作DEMO。
完整代码:
function lastinteger($item) {
preg_match_all('/data-id=[\"\']([1-9]+)[\"\']/',$item,$array);
$out = end($array);
return $out[0];
}
$path1 = "<span class='span1' data-id=2>lorem ipsum</span>";
$path2 = "<span class='span2' data-id=14>lorem ipsum</span>";
$a = lastinteger($path1); //2
$b = lastinteger($path2); //14
参考文献:
正则表达式教程:tutorialspoint.com
创建正则表达式的好工具:regexr.com
答案 1 :(得分:2)
如果您不使用正则表达式,则可以使用DOM API:
$dom = DOMDocument::loadHTML($path2);
echo $dom->getElementsByTagName('span')[0]->getAttribute('data-id');
答案 2 :(得分:1)
根据这些变量的设置方式,一种解决方案可能是先获取整数,然后将其注入路径:
$dataId = 2;
$path1 = "<span class='span1' data-id='$dataId'>lorem ipsum</span>";
(请注意,我在data-id值周围添加了引号,否则您的HTML无效。)
如果你不是自己构建字符串,但需要解析它们,我不会简单地得到最后一个整数。原因是你可能得到这样的标签:
<span class='span1' data-id='4'>Happy 25th birthday!</span>
在这种情况下,字符串中的最后一个整数是25,这不是你想要的。相反,我会使用正则表达式来捕获data-id属性的值:
$path1 = "<span class='span1' data-id='2'>lorem ipsum</span>";
preg_match('/data-id=\'(\d+)\'/', $path1, $matches);
$dataId = $matches[1];
echo($dataId); // => 2
答案 3 :(得分:1)
我认为您应该使用正则表达式,例如:
<?php
$paths = [];
$paths[] = '<span class=\'span1\' data-id=2>lorem ipsum dolor</span>';
$paths[] = '<span class=\'span2\' data-id=14>lorem ipsum</span>';
foreach($paths as $path){
preg_match('/data-id=([0-9]+)/', $path, $data_id);
echo 'data-id for '.$path.' is '.$data_id[1].'<br />';
}
这将输出:
lorem ipsum dolor的data-id为2
lorem ipsum的data-id为14
答案 4 :(得分:1)
function find($path){
$countPath = strlen($path);
for ($i = 0; $i < $countPath; $i++) {
if (substr($path, $i, 3) == "-id") {
echo substr($path, $i + 4, 1);
}
}}find($path1);
答案 5 :(得分:1)
为此目的写了一个适当的功能。
function LastNumber($text){
$strlength = strlen($text); // get length of the string
$lastNumber = ''; // this variable will accumulate digits
$numberFound = 0;
for($i = $strlength - 1; $i > 0; $i--){ // for cicle reads your string from end to start
if(ctype_digit($text[$i])){
$lastNumber = $lastNumber . $text[$i]; // if digit is found, it is added to last number string;
$numberFound = 1; // and numberFound variable is set to 1
}else if($numberFound){ // if atleast one digit was found (numberFound == 1) and we find non-digit, we know that last number of the string is over so we break from the cicle.
break;
}
}
return intval(strrev($lastNumber), 10); // strrev reverses last number string, because we read original string from end to start. Finally, intval function converts string to integer with base 10
}
答案 6 :(得分:1)
我知道这已经得到了回答,但是如果你真的想要在一行中得到最后一个int而没有专门提到属性或标签名称,那么考虑使用它。
$str = "
asfdl;kjas;lkjfasl;kfjas;lf 999 asdflkasjfdl;askjf
<span class='span1' data-id=2>lorem ipsum</span>
<span class='span2' data-id=14>lorem ipsum</span>
Look at me I end with a number 1234
";
$matches = NULL;
$num = preg_match_all('/(.*)(?<!\d)(\d+)[^0-9]*$/m', $str, $matches);
if (!$num) {
echo "no matches found\n";
} else {
var_dump($matches[2]);
}
它将从每行的最后一个整数的多行输入返回一个数组:
array(4) {
[0] =>
string(3) "999"
[1] =>
string(1) "2"
[2] =>
string(2) "14"
[3] =>
string(4) "1234"
}