Search array for <tr>


Search array for <tr>

我有一个名为$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

<?php
function searchArrayText($clantable, $findText){
    foreach($findText as $e) {
        if(strpos($clantable, $e) !== false) {
            echo $e;
        }
    }
}
$findText = '<tr style="height: 32px; ">';
searchArrayText($clantable, $findText);

?>

不确定是不是最聪明的方法,但我用这个。

使用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);
?>

当您说"如果我找到匹配项,请将其放入'$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标记的内容,或者修改regex来为您完成这项工作。但是,如果不需要的话,我不建议您使用regex,因为您可以使用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标记的内容。