Php 如何将排序函数包含到已解析的表中?
我想通过simple_html_dom对解析后的html表按其两列进行排序,并在回显之前按特定顺序对某些部分进行排序。它是pos的第一列,已更新 您必须循环遍历$results数组,然后循环遍历每个players结果,以输出所需的数据。这应该行得通Php 如何将排序函数包含到已解析的表中?,php,sorting,html-table,html-parsing,Php,Sorting,Html Table,Html Parsing,我想通过simple_html_dom对解析后的html表按其两列进行排序,并在回显之前按特定顺序对某些部分进行排序。它是pos的第一列,已更新 您必须循环遍历$results数组,然后循环遍历每个players结果,以输出所需的数据。这应该行得通 $str = "<table><hr> <tr><th>po</th><th>player</th><th>age</th><th&
$str = "<table><hr>
<tr><th>po</th><th>player</th><th>age</th><th>2ga</th><th>2g%</th><th>fta</th><th>ft%</th><th>3ga</th><th>3g%</th><th>orb</th><th>drb</th><th>ast</th><th>stl</th><th>to</th><th>blk</th><th>o-o</th><th>d-o</th><th>p-o</th><th>t-o</th><th>o-d</th><th>d-d</th><th>p-d</th><th>t-d</th></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp>James Harden</td><td>27</td><td>48</td><td>53</td><td>95</td><td>85</td><td>85</td><td>35</td><td>20</td><td>59</td><td>99</td><td>57</td><td>1</td><td>12</td><td>4</td><td>9</td><td>7</td><td>9</td><td>8</td><td>6</td><td>5</td><td>7</td></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp>Dennis Schroder</td><td>23</td><td>68</td><td>49</td><td>32</td><td>85</td><td>39</td><td>34</td><td>10</td><td>25</td><td>65</td><td>42</td><td>35</td><td>6</td><td>8</td><td>8</td><td>2</td><td>6</td><td>5</td><td>4</td><td>2</td><td>6</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Evan Fournier</td><td>24</td><td>46</td><td>49</td><td>39</td><td>81</td><td>53</td><td>36</td><td>12</td><td>23</td><td>29</td><td>41</td><td>61</td><td>1</td><td>7</td><td>5</td><td>4</td><td>4</td><td>5</td><td>4</td><td>2</td><td>6</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Jamal Murray</td><td>19</td><td>39</td><td>47</td><td>21</td><td>88</td><td>63</td><td>33</td><td>14</td><td>29</td><td>30</td><td>42</td><td>61</td><td>13</td><td>7</td><td>5</td><td>3</td><td>3</td><td>5</td><td>4</td><td>3</td><td>5</td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp>Luol Deng</td><td>31</td><td>32</td><td>43</td><td>13</td><td>73</td><td>36</td><td>31</td><td>27</td><td>48</td><td>16</td><td>45</td><td>82</td><td>13</td><td>5</td><td>3</td><td>4</td><td>1</td><td>7</td><td>6</td><td>5</td><td>6</td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp>Dante Cunningham</td><td>29</td><td>19</td><td>58</td><td>5</td><td>59</td><td>36</td><td>39</td><td>21</td><td>41</td><td>7</td><td>33</td><td>90</td><td>17</td><td>8</td><td>2</td><td>4</td><td>1</td><td>5</td><td>4</td><td>4</td><td>5</td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp>Thomas Robinson</td><td>25</td><td>55</td><td>54</td><td>32</td><td>47</td><td>0</td><td>0</td><td>83</td><td>67</td><td>15</td><td>57</td><td>55</td><td>14</td><td>4</td><td>4</td><td>9</td><td>1</td><td>9</td><td>5</td><td>9</td><td>5</td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp>Ryan Kelly</td><td>24</td><td>38</td><td>45</td><td>32</td><td>69</td><td>23</td><td>14</td><td>25</td><td>58</td><td>12</td><td>34</td><td>79</td><td>19</td><td>1</td><td>3</td><td>7</td><td>1</td><td>7</td><td>4</td><td>6</td><td>5</td></tr>
<tr><td CLASS=tdp> C</td><td CLASS=tdp>Dewayne Dedmon</td><td>27</td><td>33</td><td>62</td><td>20</td><td>70</td><td>0</td><td>0</td><td>57</td><td>79</td><td>10</td><td>36</td><td>73</td><td>43</td><td>5</td><td>3</td><td>9</td><td>1</td><td>8</td><td>5</td><td>9</td><td>4</td></tr>
<tr><td CLASS=tdp> C</td><td CLASS=tdp>Robert Sacre</td><td>26</td><td>38</td><td>41</td><td>33</td><td>66</td><td>0</td><td>0</td><td>56</td><td>34</td><td>12</td><td>15</td><td>80</td><td>28</td><td>1</td><td>4</td><td>7</td><td>3</td><td>5</td><td>2</td><td>7</td><td>2</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Vince Carter</td><td>40</td><td>19</td><td>42</td><td>20</td><td>77</td><td>54</td><td>38</td><td>12</td><td>33</td><td>23</td><td>47</td><td>83</td><td>20</td><td>7</td><td>3</td><td>4</td><td>2</td><td>5</td><td>4</td><td>3</td><td>5</td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp>Nicolas Brussino</td><td>23</td><td>13</td><td>50</td><td>11</td><td>77</td><td>51</td><td>31</td><td>27</td><td>34</td><td>24</td><td>39</td><td>74</td><td>13</td><td>5</td><td>4</td><td>3</td><td>1</td><td>6</td><td>4</td><td>4</td><td>5</td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp>Drew Gooden</td><td>34</td><td>31</td><td>42</td><td>12</td><td>64</td><td>38</td><td>17</td><td>50</td><td>49</td><td>11</td><td>31</td><td>77</td><td>31</td><td>1</td><td>3</td><td>4</td><td>1</td><td>6</td><td>3</td><td>7</td><td>3</td></tr>
</table>";
$str = preg_replace('/\s{1,}/', ' ', $str);
preg_match_all('/<tr>(.*?)<\/tr>/', $str, $rows);
foreach($rows[1] as $row){
preg_match_all('/<td(.*?)<\/td>/', $row, $data);
$results[] = $data[0];
}
$header = $rows[0][0]; //<----Added this.
unset($results[0]);
array_walk_recursive($results, function(&$a, $b){
$a = strip_tags($a);
$a = trim($a);
});
$results = array_values($results);
for($i = 0; $i < count($results); $i++){
switch($results[$i][0]){
case 'PG':
$results[$i][0] = 1;
break;
case 'SG':
$results[$i][0] = 2;
break;
case 'SF':
$results[$i][0] = 3;
break;
case 'PF':
$results[$i][0] = 4;
break;
case 'C':
$results[$i][0] = 5;
break;
}
}
usort($results, function($a, $b){
if([$a[0], $a[4]] < [$b[0], $b[4]]){
return 1;
}elseif([$a[0], $a[4]] > [$b[0], $b[4]]){
return -1;
}else{
return 0;
}
});
for($i = 0; $i < count($results); $i++){
switch($results[$i][0]){
case 1:
$results[$i][0] = 'PG';
break;
case 2:
$results[$i][0] = 'SG';
break;
case 3:
$results[$i][0] = 'SF';
break;
case 4:
$results[$i][0] = 'PF';
break;
case 5:
$results[$i][0] = 'C';
break;
}
}
echo
'<table>';
echo $header; //<--Changed to this.
foreach($results as $key){
echo
'<tr>';
foreach($key as $k=>$v){
echo
'<td>' . $v . '</td>';
}
echo
'</tr>';
}
echo
'</table>';
你能添加示例代码吗?当然可以。你说的是解析的html表格;您是否正在尝试解析这些统计数据的HTML表(例如,使用SimpleXML或DOMDocument),使用PHP执行某些操作,然后再次打印出来?或者您正在从PHP生成HTML表?目前使用simple_HTML_dom。请向我们展示您的尝试、预期结果和当前得到的结果。谢谢。有两件事:1]列0应按定义的顺序排序:PG=1 | SG=2 | SF=3 | PF=4 | C=5。现在这并不意味着位置的改变,比如哈登从PG换到C,这应该会让他落后于施罗德。但第4列的部分工作正常。2] 在我的基本代码中放在哪里?当然,你能给我一个更大的数据样本吗。编辑了这个问题。正如你在表格末尾看到的,有一些球员应该被归类到同一位置的其他球员。所有位置相同的球员都应该按第4列排序。@Chris我更新了我的答案。看看这是否有帮助。。我对pos的排序顺序仍有点粗略。此更新确实保留了您发布的关系。@Chris我在代码中犯了一个错误。我已经用新的编辑更新了代码。。我切换了条带标签和修剪功能的顺序。我也发布了新的结果。让我知道。
<table><hr>
<tr><th>po</th><th>player</th><th>age</th><th>2ga</th><th>2g%</th><th>fta</th><th>ft%</th><th>3ga</th><th>3g%</th><th>orb</th><th>drb</th><th>ast</th><th>stl</th><th>to</th><th>blk</th><th>o-o</th><th>d-o</th><th>p-o</th><th>t-o</th><th>o-d</th><th>d-d</th><th>p-d</th><th>t-d</th></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp>James Harden</td><td>27</td><td>48</td><td>53</td><td>95</td><td>85</td><td>85</td><td>35</td><td>20</td><td>59</td><td>99</td><td>57</td><td>1</td><td>12</td><td>4</td><td>9</td><td>7</td><td>9</td><td>8</td><td>6</td><td>5</td><td>7</td></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp>Dennis Schroder</td><td>23</td><td>68</td><td>49</td><td>32</td><td>85</td><td>39</td><td>34</td><td>10</td><td>25</td><td>65</td><td>42</td><td>35</td><td>6</td><td>8</td><td>8</td><td>2</td><td>6</td><td>5</td><td>4</td><td>2</td><td>6</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Evan Fournier</td><td>24</td><td>46</td><td>49</td><td>39</td><td>81</td><td>53</td><td>36</td><td>12</td><td>23</td><td>29</td><td>41</td><td>61</td><td>1</td><td>7</td><td>5</td><td>4</td><td>4</td><td>5</td><td>4</td><td>2</td><td>6</td></tr>
... more rows ...
</table>
$table = $html->find('table', 1);
$rowData = array();
// Loop
foreach($table->find('tr') as $row) {
// initialize array to store the cell data from each row
$roster = array();
foreach($row->find('td') as $cell) {
// push the cell's text to the array
$roster[] = $cell->innertext;
}
foreach($row->find('th') as $cell) {
// push the cell's text to the array
$roster[] = $cell->innertext;
}
$rowData[] = $roster;
}
echo '<table>';
foreach ($rowData as $row => $tr) {
echo '<tr>';
foreach ($tr as $td)
echo '<td>' . $td .'</td>';
echo '</tr>';
}
echo '</table>';
$rowData = $str;
$str = preg_replace('/\s{1,}/', ' ', $str);
preg_match_all('/<tr>(.*?)<\/tr>/', $str, $rows);
foreach($rows[1] as $row){
preg_match_all('/<td(.*?)<\/td>/', $row, $data);
$results[] = $data[0];
}
unset($results[0]);
array_walk_recursive($results, function(&$a, $b){
$a = strip_tags($a);
$a = trim($a);
});
$results = array_values($results);
for($i = 0; $i < count($results); $i++){
switch($results[$i][0]){
case 'PG':
$results[$i][0] = 1;
break;
case 'SG':
$results[$i][0] = 2;
break;
case 'SF':
$results[$i][0] = 3;
break;
case 'PF':
$results[$i][0] = 4;
break;
case 'C':
$results[$i][0] = 5;
break;
}
}
usort($results, function($a, $b){
if([$a[0], $a[4]] < [$b[0], $b[4]]){
return 1;
}elseif([$a[0], $a[4]] > [$b[0], $b[4]]){
return -1;
}else{
return 0;
}
});
for($i = 0; $i < count($results); $i++){
switch($results[$i][0]){
case 1:
$results[$i][0] = 'PG';
break;
case 2:
$results[$i][0] = 'SG';
break;
case 3:
$results[$i][0] = 'SF';
break;
case 4:
$results[$i][0] = 'PF';
break;
case 5:
$results[$i][0] = 'C';
break;
}
}
}
$str = "<table><hr>
<tr><th>po</th><th>player</th><th>age</th><th>2ga</th><th>2g%</th><th>fta</th><th>ft%</th><th>3ga</th><th>3g%</th><th>orb</th><th>drb</th><th>ast</th><th>stl</th><th>to</th><th>blk</th><th>o-o</th><th>d-o</th><th>p-o</th><th>t-o</th><th>o-d</th><th>d-d</th><th>p-d</th><th>t-d</th></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp>James Harden</td><td>27</td><td>48</td><td>53</td><td>95</td><td>85</td><td>85</td><td>35</td><td>20</td><td>59</td><td>99</td><td>57</td><td>1</td><td>12</td><td>4</td><td>9</td><td>7</td><td>9</td><td>8</td><td>6</td><td>5</td><td>7</td></tr>
<tr><td CLASS=tdp>PG</td><td CLASS=tdp>Dennis Schroder</td><td>23</td><td>68</td><td>49</td><td>32</td><td>85</td><td>39</td><td>34</td><td>10</td><td>25</td><td>65</td><td>42</td><td>35</td><td>6</td><td>8</td><td>8</td><td>2</td><td>6</td><td>5</td><td>4</td><td>2</td><td>6</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Evan Fournier</td><td>24</td><td>46</td><td>49</td><td>39</td><td>81</td><td>53</td><td>36</td><td>12</td><td>23</td><td>29</td><td>41</td><td>61</td><td>1</td><td>7</td><td>5</td><td>4</td><td>4</td><td>5</td><td>4</td><td>2</td><td>6</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Jamal Murray</td><td>19</td><td>39</td><td>47</td><td>21</td><td>88</td><td>63</td><td>33</td><td>14</td><td>29</td><td>30</td><td>42</td><td>61</td><td>13</td><td>7</td><td>5</td><td>3</td><td>3</td><td>5</td><td>4</td><td>3</td><td>5</td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp>Luol Deng</td><td>31</td><td>32</td><td>43</td><td>13</td><td>73</td><td>36</td><td>31</td><td>27</td><td>48</td><td>16</td><td>45</td><td>82</td><td>13</td><td>5</td><td>3</td><td>4</td><td>1</td><td>7</td><td>6</td><td>5</td><td>6</td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp>Dante Cunningham</td><td>29</td><td>19</td><td>58</td><td>5</td><td>59</td><td>36</td><td>39</td><td>21</td><td>41</td><td>7</td><td>33</td><td>90</td><td>17</td><td>8</td><td>2</td><td>4</td><td>1</td><td>5</td><td>4</td><td>4</td><td>5</td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp>Thomas Robinson</td><td>25</td><td>55</td><td>54</td><td>32</td><td>47</td><td>0</td><td>0</td><td>83</td><td>67</td><td>15</td><td>57</td><td>55</td><td>14</td><td>4</td><td>4</td><td>9</td><td>1</td><td>9</td><td>5</td><td>9</td><td>5</td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp>Ryan Kelly</td><td>24</td><td>38</td><td>45</td><td>32</td><td>69</td><td>23</td><td>14</td><td>25</td><td>58</td><td>12</td><td>34</td><td>79</td><td>19</td><td>1</td><td>3</td><td>7</td><td>1</td><td>7</td><td>4</td><td>6</td><td>5</td></tr>
<tr><td CLASS=tdp> C</td><td CLASS=tdp>Dewayne Dedmon</td><td>27</td><td>33</td><td>62</td><td>20</td><td>70</td><td>0</td><td>0</td><td>57</td><td>79</td><td>10</td><td>36</td><td>73</td><td>43</td><td>5</td><td>3</td><td>9</td><td>1</td><td>8</td><td>5</td><td>9</td><td>4</td></tr>
<tr><td CLASS=tdp> C</td><td CLASS=tdp>Robert Sacre</td><td>26</td><td>38</td><td>41</td><td>33</td><td>66</td><td>0</td><td>0</td><td>56</td><td>34</td><td>12</td><td>15</td><td>80</td><td>28</td><td>1</td><td>4</td><td>7</td><td>3</td><td>5</td><td>2</td><td>7</td><td>2</td></tr>
<tr><td CLASS=tdp>SG</td><td CLASS=tdp>Vince Carter</td><td>40</td><td>19</td><td>42</td><td>20</td><td>77</td><td>54</td><td>38</td><td>12</td><td>33</td><td>23</td><td>47</td><td>83</td><td>20</td><td>7</td><td>3</td><td>4</td><td>2</td><td>5</td><td>4</td><td>3</td><td>5</td></tr>
<tr><td CLASS=tdp>SF</td><td CLASS=tdp>Nicolas Brussino</td><td>23</td><td>13</td><td>50</td><td>11</td><td>77</td><td>51</td><td>31</td><td>27</td><td>34</td><td>24</td><td>39</td><td>74</td><td>13</td><td>5</td><td>4</td><td>3</td><td>1</td><td>6</td><td>4</td><td>4</td><td>5</td></tr>
<tr><td CLASS=tdp>PF</td><td CLASS=tdp>Drew Gooden</td><td>34</td><td>31</td><td>42</td><td>12</td><td>64</td><td>38</td><td>17</td><td>50</td><td>49</td><td>11</td><td>31</td><td>77</td><td>31</td><td>1</td><td>3</td><td>4</td><td>1</td><td>6</td><td>3</td><td>7</td><td>3</td></tr>
</table>";
$str = preg_replace('/\s{1,}/', ' ', $str);
preg_match_all('/<tr>(.*?)<\/tr>/', $str, $rows);
foreach($rows[1] as $row){
preg_match_all('/<td(.*?)<\/td>/', $row, $data);
$results[] = $data[0];
}
$header = $rows[0][0]; //<----Added this.
unset($results[0]);
array_walk_recursive($results, function(&$a, $b){
$a = strip_tags($a);
$a = trim($a);
});
$results = array_values($results);
for($i = 0; $i < count($results); $i++){
switch($results[$i][0]){
case 'PG':
$results[$i][0] = 1;
break;
case 'SG':
$results[$i][0] = 2;
break;
case 'SF':
$results[$i][0] = 3;
break;
case 'PF':
$results[$i][0] = 4;
break;
case 'C':
$results[$i][0] = 5;
break;
}
}
usort($results, function($a, $b){
if([$a[0], $a[4]] < [$b[0], $b[4]]){
return 1;
}elseif([$a[0], $a[4]] > [$b[0], $b[4]]){
return -1;
}else{
return 0;
}
});
for($i = 0; $i < count($results); $i++){
switch($results[$i][0]){
case 1:
$results[$i][0] = 'PG';
break;
case 2:
$results[$i][0] = 'SG';
break;
case 3:
$results[$i][0] = 'SF';
break;
case 4:
$results[$i][0] = 'PF';
break;
case 5:
$results[$i][0] = 'C';
break;
}
}
echo
'<table>';
echo $header; //<--Changed to this.
foreach($results as $key){
echo
'<tr>';
foreach($key as $k=>$v){
echo
'<td>' . $v . '</td>';
}
echo
'</tr>';
}
echo
'</table>';