我使用simple_html_dom.php来创建一个td元素值数组。我想把这个数组重新组织成我可以工作的东西,而不仅仅是一个简单的列表。
数组看起来像这样(我缩短了要简化的属性数量):
ret[0] = 1 // player position
ret[1] = Tiger Woods // player name
ret[3] = 68 // score
ret[4] = 2 // start of second record, player #2 position
ret[5] = Phil Mickleson // player #2 name
ret[6] = 69 // player #2 score
我想把它变成另一个数组:
$ret['position'] = 1,2
$ret['name'] = Tiger Woods, Phil Mickleson
$ret['score'] = 68, 69
我如何处理:元素0,4并将它们放置到位 元素1,5并将它们放入名称中 元素6,3并将它们放入分数
每条记录包含相同数量的属性。请考虑我的完整属性列表是10而不是3,如上所示。
这是我到目前为止的实际代码,它可以工作,并将给出我正在使用的数组。我愿意接受任何更好地利用simple_html_dom.php的解决方案
$html = file_get_html('http://sports.yahoo.com/golf/pga/leaderboard');
// Use simple_html_dom to find all td elements as an array
$ret = $html->find('td');
// Code to remove all unwanted td elements from the array
unset($ret[0]);
unset($ret[1]);
$rem=count($ret)-1;
unset($ret[$rem]);
// Code to display all values in the array
foreach($ret as $value){
echo $value . '<br>';
}
非常感谢!
布莱恩
答案 0 :(得分:0)
$newret = array_combine (
array('position', 'name', 'score'),
call_user_func_array(
'array_map',
array_merge(array(NULL),array_chunk($ret, 3))
)
);
var_dump($newret);
修改强>
如果您想要逗号分隔列表而不是嵌套数组:
$newret = array_map(
function ($value) { return implode(', ', $value); },
array_combine (
array('position', 'name', 'score'),
call_user_func_array(
'array_map',
array_merge(array(NULL),array_chunk($ret, 3))
)
)
);
var_dump($newret);
答案 1 :(得分:0)
遍历表格的行,而不是所有的TD。
$ret = array('position' => array(),
'name' => array(),
'score' => array());
$rows = $html->find('table.sportsTable tbody tr');
foreach ($rows as $row) {
$cells = $row->find('td');
$ret['position'][] = $cells[0]->plaintext;
$ret['name'][] = $cells[1]->plaintext;
$ret['score'][] = $cells[2]->plaintext;
}
$ret['position'] = implode(', ', $ret['position']);
$ret['name'] = implode(', ', $ret['name']);
$ret['score'] = implode(', ', $ret['score']);
答案 2 :(得分:0)
最终代码:
<!DOCTYPE html>
<html>
<body>
<?php include 'simple_html_dom.php'; ?>
<?php
// Create DOM from Yahoo Sports URL
$html = file_get_html('http://sports.yahoo.com/golf/pga/leaderboard');
$ret = array('position' => array(),
'name' => array(),
'rd_one_score' => array());
$rows = $html->find('table.sportsTable tbody tr');
$count = 0;
foreach ($rows as $row) {
$cells = $row->find('td');
$ret['position'][] = $cells[0]->plaintext;
$ret['name'][] = $cells[1]->plaintext;
$ret['rd_one_score'][] = $cells[2]->plaintext;
$count = $count+1;
}
// Build table form array
echo "<table>";
echo "<tr><td>Position</td><td>Name</td><td>Score</td></tr>";
for ($x=1; $x<=$count; $x++) {
echo "<tr><td>", $ret['position'][$x], "</td>";
echo "<td>", $ret['name'][$x], "</td>";
echo "<td>", $ret['rd_one_score'][$x], "</td></tr>";
}
echo "</table>";
?>
</body>
</html>
答案 3 :(得分:0)
让我们想象simple_html_dom是it should have been的文库:
$dom = file_get_html('http://sports.yahoo.com/golf/pga/leaderboard');
$ret = array();
$ret['position'] = implode(',', $dom->find('.sportsTable tbody tr td:eq(1)')->trim_texts);
$ret['name'] = implode(',', $dom->find('.sportsTable tbody tr td:eq(2)')->trim_texts);
$ret['score'] = implode(',', $dom->find('.sportsTable tbody tr td:eq(3)')->trim_texts);
var_dump($ret);