如何使用symfony dom crawler将html表解析为数组

ari*_*yat 6 php arrays symfony domcrawler

我有html表,我想从该表中创建数组

$html = '<table>
<tr>
    <td>satu</td>
    <td>dua</td>
</tr>
<tr>
    <td>tiga</td>
    <td>empat</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)

我的数组必须看起来像这样

array(
   array(
      "satu",
      "dua",
   ),
   array(
     "tiga",
     "empat",
   )
)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了下面的代码,但无法获得我需要的数组

$crawler = new Crawler();
$crawler->addHTMLContent($html);
$row = array();
$tr_elements = $crawler->filterXPath('//table/tr');
foreach ($tr_elements as $tr) {
 // ???????
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*Luz 12

$table = $crawler->filter('table')->filter('tr')->each(function ($tr, $i) {
    return $tr->filter('td')->each(function ($td, $i) {
        return trim($td->text());
    });
});

print_r($table);
Run Code Online (Sandbox Code Playgroud)

上面的例子将为您提供一个多维数组,其中第一层是表格行"tr",第二层是表格列"td".


got*_*oto 7

$html = '<table>
            <tr>
                <td>satu</td>
                <td>dua</td>
            </tr>
            <tr>
                <td>tiga</td>
                <td>empat</td>
            </tr>
            </table>';

    $crawler = new Crawler();
    $crawler->addHTMLContent($html);
    $rows = array();
    $tr_elements = $crawler->filterXPath('//table/tr');
    // iterate over filter results
    foreach ($tr_elements as $i => $content) {
        $tds = array();
        // create crawler instance for result
        $crawler = new Crawler($content);
        //iterate again
        foreach ($crawler->filter('td') as $i => $node) {
           // extract the value
            $tds[] = $node->nodeValue;

        }
        $rows[] = $tds;

    }
    var_dump($rows );exit;
Run Code Online (Sandbox Code Playgroud)

会显示

array 
  0 => 
    array 
      0 => string 'satu' 
      1 => string 'dua' 
  1 => 
    array (size=2)
      0 => string 'tiga' 
      1 => string 'empat'
Run Code Online (Sandbox Code Playgroud)