php - PHP:HTML 到 PHP 多维关联数组
问题描述
使用 xPath 查询,我试图提取 HTML 值并将它们放入 PHP 中的关联数组中。我正在使用循环从表中获取行和单元格。但是,我无法弄清楚如何将数组中的单元格嵌入到表示行的数组中。基本上,只是将表结构转移到一个数组中。理想情况下,这将有助于为单元格数据分配键。
我尝试将 $key 组合为一个数组和一个计数器来分配键/值对。我和xpath在不同点的结构。我可以填满阵列,但我是但我似乎无法破解它。
$cells = array();
$cell_values = array();
$key = array("MM", "DD", "TIME", "WVHT", "SwH", "SwP", "SwD", "WWH", "WWP", "WWD", "STEEPNESS", "APD");
$i = 3;
while($i <= 5){
$rows = $xpath->query('//table[@class="dataTable"][2]/tr['.$i.']');
if (!is_null($rows)){
foreach ($rows as $row) {
$cells = $row->getElementsByTagName('td');
$i++;
foreach ($cells as $cell) {
$cell_values[] = $cell->nodeValue;
$dataOut[] = array_combine($key, $cell_values);
}
}
}
}
预期的:
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9]
=> [10] =>
[11] => Array ( [MM] => 02 [DD] => 17 [TIME] => 11:30 am [WVHT]
=> 3.0 [SwH] => 0.3 [SwP] => 10.5 [SwD] => SE [WWH] => 2.6 [WWP] => 8.3
[WWD] => SE [STEEPNESS] => AVERAGE [APD] => 4.4 )
//Next set of row data with $keys
[12] => Array ( [MM] => 02 [DD] => 17 [TIME] => 11:00 am [WVHT] => 3.3 [SwH]
=> 0.3 [SwP] => 10.5 [SwD] => SE [WWH] => 2.6 [WWP] => 8.3 [WWD] => SE
[STEEPNESS] => AVERAGE [APD] => 4.4 )
[13] => Array... etc.
我得到什么:
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9]
=> [10] => [11] => Array ( [MM] => 02 [DD] => 17 [TIME] => 11:30 am [WVHT]
=> 3.0 [SwH] => 0.3 [SwP] => 10.5 [SwD] => SE [WWH] => 2.6 [WWP] => 8.3
[WWD] => SE [STEEPNESS] => AVERAGE [APD] => 4.4 ) [12] => [13] => [14] =>
[15] => [16] => [17] => [18] => [19] => [20] => [21] => [22] => [23] => [24]
=> [25] => [26] => [27] => [28] => [29] => [30] => [31] => [32] => [33] =>
[34] => [35] => )
解决方案
如果将键定义为$key
数组中的值而不是键,则可以使用 s 中array_combine
的值来<td>
为结果数组生成行。
$rows = $xpath->query('//table[@class="dataTable"][2]/tr');
// define these as values so you can use them in array_combine
$key = array("WVHT", "SwH", "SwD", "WWH", "WWP", "WWD", "STEEPNESS", "AMD");
$data = array();
$cells = array();
if (!is_null($rows)) {
foreach ($rows as $row) {
$cells = $row->getElementsByTagName('td');
// get all the cell values from the row
$row_values = [];
foreach ($cells as $cell) {
$row_values[] = $cell->nodeValue;
}
// combine the keys with the values for this row and add the row to $data
$data[] = array_combine($key, $row_values);
}
}
推荐阅读
- sql - 针对不变语言环境的特定 SQL 查询
- php - 使用 PHP 邮件发送带附件的电子邮件;没有邮件
- laravel - Laravel 背包仪表板在开发过程中突然空白,可能是它背后的问题?
- django - django-channels 不适用于 Linux 服务器上的 daphne
- python - Tensorflow_core._api.v2.train 没有属性“slice_input_producer”
- jasmine - 如何修复类型'AsymmetricMatcher
' 不能分配给类型 '() => void'。在茉莉花/开玩笑 - xamarin - 没有暴露给 Xamarin 的 Foundation.URL 结构?
- python - 在 Python 中正确保存/导入地理编码数据
- jquery - 如何使用 JQuery 将相同的输入值克隆到其他输入?
- java - 在不打开相机应用程序的情况下拍照