【问题标题】:php array to html table sort by columnsphp数组到html表按列排序
【发布时间】:2014-03-10 12:23:33
【问题描述】:

我有一个输出到表的 php 数组。但我需要按第一列、第二列、第三列和第四列对表格进行排序。我不确定我应该使用函数还是 ksort。我所拥有的如下。我似乎也有一些注意事项:运行时使用未定义的常量。

<!DOCTYPE html>
<html>
<body>
<?php
$state=array
(
array('Alabama', 'Montgomery', 4779736, 23),
array('Alaska', 'Juneau', 710231, 47),
array('Arizona', 'Phoenix', 6329017, 18),
array('Arkansas', 'LittleRock', 2915918, 32),
array('California', 'Sacramento', 37253956, 1),
array('Colorado', 'Denver', 5029196, 22),
array('Connecticut', 'Hartford', 3518288, 29),
array('Delaware', 'Dover', 897934, 45),
array('Florida', 'Tallahassee', 18801310, 4),
array('Georgia', 'Atlanta', 9687653, 9),
array('Hawaii', 'Boise', 1360301, 42)
);

echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th>' . State. '</th>');
   echo('<th>' . Capital. '</th>');
   echo('<th>' . Population. '</th>');
   echo('<th>' . Rank. '</th>');
 echo'</tr>';

for ($i=0; $i<11; $i++)
{echo('<tr>');
  for ($j=0; $j<4; $j++)
  {echo ('<td>' . $state[$i][$j] . '</td>');
  }
  echo('</tr>');
}
echo "</table>"

?>
</body>
</html>

这是我的另一个尝试:

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
$states[] = array('state' => 'Georgia', 'capital' => 'Atlanta', 'rank' => 9);
$states[] = array('state' => 'Alaska', 'capital' => 'Juneau', 'rank' => 47);
$states[] = array('state' => 'Alabama', 'capital' => 'Montgomery', 'rank' => 23);
$states[] = array('state' => 'Hawaii', 'capital' => 'Boise', 'rank' => 42);

$capital = array();
foreach ($states as $key => $row)
{
    $capital[$key] = $row['capital'];
}
echo \array_multisort($capital, \SORT_DESC, $states);

?>
    </body>
</html>

这是我目前所拥有的,但由于某种原因,编号列(人口和排名)在他们的表格中没有正确排序:

<?php 
$states=array
(
array('state' =>  'Alabama', 'capital' => 'Montgomery', 'population' => 4779736, 'rank' =>  23),
array('state' => 'Alaska', 'capital' =>  'Juneau', 'population' => 710231, 'rank' =>  47),
array('state' => 'Arizona',  'capital' => 'Phoenix',  'population' =>6329017, 'rank' =>  18),
array('state' => 'Arkansas',  'capital' => 'LittleRock',  'population' =>2915918, 'rank' =>  32),
array('state' => 'California', 'capital' =>  'Sacramento', 'population' => 37253956, 'rank' =>  1),
array('state' => 'Colorado',  'capital' => 'Denver', 'population' => 5029196,  'rank' => 22),
array('state' => 'Connecticut', 'capital' =>  'Hartford', 'population' => 3518288, 'rank' =>  29),
array('state' => 'Delaware',  'capital' => 'Dover',  'population' =>897934, 'rank' =>  45),
array('state' => 'Florida',  'capital' => 'Tallahassee', 'population' => 18801310, 'rank' =>  4),
array('state' => 'Georgia', 'capital' =>  'Atlanta', 'population' => 9687653,  'rank' => 9),
array('state' => 'Hawaii',  'capital' => 'Boise', 'population' => 1360301, 'rank' =>  42)
);


//Create index rows
foreach ($states as $row) {
  foreach ($row as $key => $value){
    ${$key}[]  = $value; //Creates $volume, $edition, $name and $type arrays.
  }  
}
echo '<h2>Below is the initial table</h2>';
echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th> State </th>');
   echo('<th> Capital </th>');
   echo('<th> Population </th>');
   echo('<th> Rank </th>');
 echo'</tr>';
  foreach($states as $k => $val){ 
    echo "<tr> <td>".$val['state']."</td>
    <td>".$val['capital']."</td>
    <td>".$val['population']."</td>
    <td>".$val['rank']."</td></tr>  ";
  }
echo "</table>";


echo '<h2>Below is the State (first column) sort table - Ascending</h2>';
echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th> State </th>');
   echo('<th> Capital </th>');
   echo('<th> Population </th>');
   echo('<th> Rank </th>');
 echo'</tr>';
 \array_multisort($state, \SORT_ASC, $states);
 foreach($states as $k => $val){ 
    echo "<tr> <td>".$val['state']."</td>
    <td>".$val['capital']."</td>
    <td>".$val['population']."</td>
    <td>".$val['rank']."</td></tr>  ";
  }
echo "</table>";


echo '<h2>Below is the Capital (second column) sort table - Descending</h2>';
echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th> State </th>');
   echo('<th> Capital </th>');
   echo('<th> Population </th>');
   echo('<th> Rank </th>');
 echo'</tr>';
 \array_multisort($capital, \SORT_DESC, $states);
 foreach($states as $k => $val){ 
    echo "<tr> <td>".$val['state']."</td>
    <td>".$val['capital']."</td>
    <td>".$val['population']."</td>
    <td>".$val['rank']."</td></tr>  ";
  }
echo "</table>";


echo '<h2>Below is the Population (third column) sort table - Ascending</h2>';
echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th> State </th>');
   echo('<th> Capital </th>');
   echo('<th> Population </th>');
   echo('<th> Rank </th>');
 echo'</tr>';
 \array_multisort($population, \SORT_ASC, $states);
 foreach($states as $k => $val){ 
    echo "<tr> <td>".$val['state']."</td>
    <td>".$val['capital']."</td>
    <td>".$val['population']."</td>
    <td>".$val['rank']."</td></tr>  ";
  }
echo "</table>";


echo '<h2>Below is the Rank (fourth column) sort table - Descending</h2>';
echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th> State </th>');
   echo('<th> Capital </th>');
   echo('<th> Population </th>');
   echo('<th> Rank </th>');
 echo'</tr>';
 \array_multisort($rank, \SORT_DESC, $states);
 foreach($states as $k => $val){ 
    echo "<tr> <td>".$val['state']."</td>
    <td>".$val['capital']."</td>
    <td>".$val['population']."</td>
    <td>".$val['rank']."</td></tr>  ";
  }
echo "</table>";
?>
</body>
</html>

【问题讨论】:

  • 它甚至可能是 OP 的 PHP 版本。我的是 5.4.23 @Jack
  • 我可以使用原始数组按每一列排序 - 不使用键吗?或者我应该使用第二种数组语法?以及如何回显排序表?
  • 如果您从数据库中获取此数组值,最好根据需要根据查询带来排序结果,这样您就可以根据需要对每一列 ASC/DESC 进行排序
  • 这不是来自数据库。

标签: php arrays sorting


【解决方案1】:

使用这个代码,我想这就是你想要的..

<?php 
$states=array
(
array('state' =>  'Alabama', 'capital' => 'Montgomery', 'population' => 4779736, 'rank' =>  23),
array('state' => 'Alaska', 'capital' =>  'Juneau', 'population' => 710231, 'rank' =>  47),
array('state' => 'Arizona',  'capital' => 'Phoenix',  'population' =>6329017, 'rank' =>  18),
array('state' => 'Arkansas',  'capital' => 'LittleRock',  'population' =>2915918, 'rank' =>  32),
array('state' => 'California', 'capital' =>  'Sacramento', 'population' => 37253956, 'rank' =>  1),
array('state' => 'Colorado',  'capital' => 'Denver', 'population' => 5029196,  'rank' => 22),
array('state' => 'Connecticut', 'capital' =>  'Hartford', 'population' => 3518288, 'rank' =>  29),
array('state' => 'Delaware',  'capital' => 'Dover',  'population' =>897934, 'rank' =>  45),
array('state' => 'Florida',  'capital' => 'Tallahassee', 'population' => 18801310, 'rank' =>  4),
array('state' => 'Georgia', 'capital' =>  'Atlanta', 'population' => 9687653,  'rank' => 9),
array('state' => 'Hawaii',  'capital' => 'Boise', 'population' => 1360301, 'rank' =>  42)
);


//Create index rows
foreach ($states as $row) {
  foreach ($row as $key => $value){
    ${$key}[]  = $value; //Creates $volume, $edition, $name and $type arrays.
  }  
}
array_multisort($state, SORT_ASC, $capital, SORT_ASC, $population, SORT_ASC, $rank , SORT_ASC,  $states);

echo "<table border=\"5\" cellpadding=\"10\">";
echo'<tr>';
   echo('<th> State </th>');
   echo('<th> Capital </th>');
   echo('<th> Population </th>');
   echo('<th> Rank </th>');
 echo'</tr>';

 foreach($states as $k => $val){ 

    echo "<tr> <td>".$val['state']."</td>
    <td>".$val['capital']."</td>
    <td>".$val['population']."</td>
    <td>".$val['rank']."</td></tr>  ";

  }

echo "</table>"

?>
</body>
</html>

【讨论】:

  • 谢谢。这摆脱了警告信息。但我仍然不确定如何排序。这种数组语法是否会使每一列的排序变得更加困难?
  • TheoneNOnlyQ ,我已经更新了上面的答案,检查一下
  • 好的,谢谢。那是一种。但我还需要按其他 3 列排序。
  • OK 我看到这将按大写排序 \array_multisort($capital, \SORT_ASC, $states);但我猜我需要一个循环,以便在不重新输入的情况下获取其他循环???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多