Php 如何将排序函数包含到已解析的表中?

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&

我想通过simple_html_dom对解析后的html表按其两列进行排序,并在回显之前按特定顺序对某些部分进行排序。它是pos的第一列,已更新

您必须循环遍历$results数组,然后循环遍历每个players结果,以输出所需的数据。这应该行得通

 $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>';