我有一个名为$ clantable的数组。这是一张超过175行的表。
现在,表格被分成一行一行。 (PHP)
0=> <table>
2=> <tr style="height: 32px; ">
3=> <td> Stuff here</td>
4=> <td> Stuff here</td>
5=> </tr>
6=> <tr style="height: 32px; ">
// etc
200=> </table>
我想在整个数组中搜索
<tr style="height: 32px; ">
如果我找到匹配项,请将其放入'$ tr_array'中。所以我可以回到'$ tr_array',然后从那里搜索。
我尝试过preg_match,strpos,in_array和array_search。
我希望它像这样
$tr_array[0] = 1; // line 1 of the clantable.
$tr_array[1] = 7; // line 7 of the clantable is a new row.
$tr_array[2] = 20; // line 20 of the clantable is a new row. etc.
谢谢!
-Alan
答案 0 :(得分:3)
<?php
function searchArrayText($clantable, $findText){
foreach($findText as $e) {
if(strpos($clantable, $e) !== false) {
echo $e;
}
}
}
$findText = '<tr style="height: 32px; ">';
searchArrayText($clantable, $findText);
?>
不确定是否是最聪明的方法,但我使用它。
答案 1 :(得分:1)
使用Alice的代码......(+ 1)
我修改了它以附加到数组中。
<?php
function searchArrayText($table_array, $findText){
$return_array = array();
foreach($table_array as $key => $val) {
if($findText == $val) {
$return_array['key'][] = $key;
$return_array['val'][] = $val;
}
}
return $return_array;
}
$findText = '<tr style="height: 32px; ">';
$tr_array = searchArrayText($clantable, $findText);
?>
答案 2 :(得分:0)
当你说“如果我找到匹配项,将其放入'$ tr_array'”时,我假设'它'你需要一个以下格式的数组:
array(
0 => '<tr style="height: 32px; "><td>Some stuff</td><td>Some stuff</td></tr>',
1 => '...',
etc...
)
如果这是您想要的,您可以将数组加入字符串并使用正则表达式。这将产生一个类似上面例子的数组
$results = array();
preg_match_all('%(<tr style="height: 32px; ">(?:<td>[A-Za-z0-9\s]*</td>)+</tr>)%', implode( '', $clantable), $results);
$tr_array = $results[0];
var_dump( $tr_array);
<强>输出:强>
array(2) {
[0]=>
string(72) "<tr style="height: 32px; "><td> Stuff here</td><td> Stuff here</td></tr>"
[1]=>
string(87) "<tr style="height: 32px; "><td> Second Example</td><td> Second Example Part 2</td></tr>"
}
当你说“$ tr_array'然后从那里搜索”时,听起来你正在进行HTML解析/抓取。如果是这样,则不必形成tr_array。如果你想要,比如标签的内容,你可以这样做:
$results = array();
preg_match_all('%(?:<tr style="height: 32px; ">((?:<td>[A-Za-z0-9\s]*</td>)+)</tr>)%', implode('', $clantable), $results);
$td_array = $results[1];
var_dump( $td_array);
<强>输出:强>
array(2) {
[0]=>
string(40) "<td> Stuff here</td><td> Stuff here</td>"
[1]=>
string(55) "<td> Second Example</td><td> Second Example Part 2</td>"
}
您可以继续解析这些结果以获取td标记的内容,或修改正则表达式为您执行此操作。但是,如果您不需要,我不建议使用正则表达式,因为您可以使用PHP的DOMDocument类来遍历HTML,假设您需要td标记的内容。它适用于字符串,并以易于分析的方式创建HTML的表示。
$doc = new DOMDocument();
$doc->loadHTML( implode( '', $clantable));
$elements = $doc->getElementsByTagName("tr");
echo 'Found ' . $elements->length . ' tr elements';
foreach( $elements as $el)
{
if( trim( $el->getAttribute('style')) == 'height: 32px;')
{
foreach( $el->childNodes as $td_nodes)
{
echo '"' . $td_nodes->nodeValue . '"';
}
}
}
以上内容仅输出td标签的内容。