我试图在我的php脚本中使用preg_match_all将相应的值捕获到两个单独的数组中。
离。
<p>
<span id="calibration_test_name_0">blah blah blah</span>
<span id="calibration_test_instrument_0">blah blah blah</span>
</p>
<p>
<span id="calibration_test_name_1">blah blah blah</span>
<span id="calibration_test_instrument_1">blah blah blah</span>
</p>
我正在创建两个独立的数组(一个用于测试名称,一个用于测试仪器)。我想用test_instrument_0输出test_name_0。等等,但我得到的结果是乱序的。我知道这与排序有关。无论如何要按照它们在文档中出现的顺序对这两个数组进行排序吗?任何帮助表示赞赏。
答案 0 :(得分:2)
答案:改为使用Parser。如果您拥有与乐器一样多的名称,则可以采用以下方法。
<?php
// your html
$html = <<<EOF
<p>
<span id="calibration_test_name_0">blah blah blah</span>
<span id="calibration_test_instrument_0">blah blah blah</span>
</p>
<p>
<span id="calibration_test_name_1">blah blah blah</span>
<span id="calibration_test_instrument_1">blah blah blah</span>
</p>
EOF;
// load the DOM
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$prefix = 'calibration_test_';
$xnames = $prefix . "name";
$xinstruments = $prefix . "instrument";
$names = iterator_to_array($xpath->query("//span[starts-with(@id, '$xnames')]"));
$instruments = iterator_to_array($xpath->query("//span[starts-with(@id, '$xinstruments')]"));
// loop over the found items
for ($i=0;$i<count($names);$i++)
echo "Name: " . $names[$i]->nodeValue . ", Instrument: " . $instruments[$i]->nodeValue . "\n";
?>
该代码段将您的html字符串加载到DOM
并对其运行两个xpath查询。这些转换为数组并在之后循环。
查看有效的demo on ideone.com。
答案 1 :(得分:1)
如果您的输入是有效的xml,那么您应该使用XML解析器而不是REGEXP。该命令实际上与REGEXP有很大关系,如果您使用命名模式,您应该能够以正确的顺序检索您的内容。同样,如果您的输入是XML有效,则XML解析器会更好。