我需要从TD获取数据,变量是一个字符串:
$string='<tr><td>abc</td><td>def</td><td>ghi</td></tr>';
echo $td_num = substr_count($string, '<td>');
for ($i=0;$i<$td_num;$i++)
{
echo "<br /><br />".$i."<br />";
$first_td[$i] = strpos($string, '<td>');
echo 'First position: '.$first_td[$i]."<br />";
$last_td[$i]=strpos($string, "</td>");
echo 'Last position: '.$last_td[$i]."<br />";
$td_value[$i]=substr($string,$first_td[$i],$last_td[$i]);
echo "TD Value: ".$td_value[$i]."<br />";
echo $string_size = strlen($string)."<br />";
$string = substr($string,$last_td[$i]);
}
结果是:
3
0
First position: 4
Last position: 11
TD Value: abc45
1
First position: 5
Last position: 0
TD Value:
34
2
First position: 5
Last position: 0
TD Value:
34
请告诉我,为什么它不起作用?我怎样才能使它工作?如何以不同方式解析TD值?
答案 0 :(得分:4)
DOMDocument
也可用于此:
$string = '<tr><td>abc</td><td>def</td><td>ghi</td></tr>';
$dom = new DOMDocument();
$dom->loadHTML($string);
foreach($dom->getElementsByTagName('td') as $td) {
echo $td->nodeValue . '<br/>';
}
您可以使用以下方法获取td值:(输出样本)
abc
def
GHI
答案 1 :(得分:1)
考虑简单,link here。在你的情况下它会像这样工作:
$html = str_get_html($string);
foreach ($html->find('td') as $td)
echo $td->innertext."\n";
答案 2 :(得分:0)
找到\ o /
(我不是很擅长英语,所以也许这是不可理解的,但至少,代码有效:P)
事实上你给了substr一个错误的第三个参数就像所说的@Jack(它应该是剪切的长度,所以你必须减去第一个pos到最后一个pos),你也有pos probs,因为你搜索的是什么有一个长度,你必须把它计入只有TD <td>
的内容是4个字符长,</td>
是5;因此,您必须在第一个pos中添加+4以获取内容位置的开头,并在after process substr中将last_td添加5以删除结束</td>
。
以下代码正常运行:
$string='<tr><td>abc</td><td>def</td><td>ghi</td></tr>';
echo $td_num = substr_count($string, '<td>');
for ($i=0;$i<$td_num;$i++)
{
echo "<br /><br />".$i."<br />";
$first_td[$i] = strpos($string, '<td>') + 4;
$last_td[$i] = strpos($string, '</td>');
$td_value[$i] = substr($string,$first_td[$i],$last_td[$i]-$first_td[$i]);
echo 'First position: '.$first_td[$i].'<br />';
echo 'Last position: '.$last_td[$i] .'<br />';
echo 'TD Value: '.htmlentities($td_value[$i]).'<br />';
echo $string_size = strlen($string).'<br />';
$string = substr($string,$last_td[$i]+5);
}
var_dump($first_td, $last_td, $td_value, $string);
但如果你不需要内容的地方,你可以使用这个:
$string='<tr><td>abc</td><td>def</td><td>ghi</td></tr>';
$td_num = substr_count($string, '<td>');
for ($i=0;$i<$td_num;$i++)
{
$first_td = strpos($string, '<td>') + 4;
$last_td = strpos($string, '</td>');
$td_values[$i] = substr($string,$first_td,$last_td-$first_td);
$string = substr($string,$last_td+5);
echo 'TD Value ['.$i.'] => '.htmlentities($td_values[$i]).'<br />';
}
var_dump($td_values);
如果您的来源是可信任的,那么您可以使用preg_match_all
$string='<tr><td>abc</td><td>def</td><TD>ghi</TD></tr>';
$matches = null;
if( preg_match_all('#<td>(.*)</td>#isU', $string, $matches) ){
var_dump($matches[1]);
}