PHP:按类排序div

时间:2016-10-29 19:53:32

标签: php algorithm sorting

我有一个php脚本生成一些div,每个div有一个类,如下所示:

<div class="1">...</div>
<div class="2">...</div>
<div class="1">...</div>
<div class="3">...</div>
<div class="2">...</div>

如何使用php有效且快速地对它们进行排序?什么是最好的排序算法?总有大约2到5个div来排序。

结果应为:

<div class="1">...</div>
<div class="1">...</div>
<div class="2">...</div>
<div class="2">...</div>
<div class="3">...</div>

2 个答案:

答案 0 :(得分:0)

如果在渲染页面之前无法使用javascript ...顺序执行此操作。 有一种MVC的例子:

  1. Masterdata
  2. 渲染
  3. 所以:

    <?php
    // $data is filled BDD or any source
    $output = [];
    foreach( $data as $row ) {
      $content = '<div class="' . $row['my-class'] . '">...</div>';
      $output[] = ['key' => $row['my-class'], 'content' => $content];
    }
    
    usort($output, function($a, $b) {
      return $a['key'] < $b['key'];
    });
    
    foreach( $output as $row ) {
      echo $row['content'];
    }
    

    我使用了2D数组。当然,您可以使用其他方式:

    $output = [];
    foreach( $data as $row ) {
      $key = $row['my-class'] . '-' . count($output);
      $output[$key] = $content;
    }
    
    ksort($output);
    
    foreach( $output as $row ) {
      echo $row;
    }
    

答案 1 :(得分:0)

如果由于某种原因你无法使用为你的类提供名称的变量,我会使用正则表达式来完成这个

$html='
    <div class="1">...</div>
    <div class="2">...</div>
    <div class="1">...</div>
    <div class="3">...</div>
    <div class="2">...</div>
';
$regex="/<div.*class=\"(.*?)\">.*?<\/div>/";
$numItems = preg_match_all($regex, $html, $matches);

$arr = array();

for ( $i = 0; $i < $numItems; $i++ ){
    $arr[$i] = array();
    $arr[$i]["code"] = $matches[0][$i];
    $arr[$i]["className"] = $matches[1][$i];
}

usort($arr, function($a, $b){ return strcmp($a["className"], $b["className"]); });
$arr = array_map(function($a){ return $a["code"]; }, $arr);
$sortedHtml = implode($arr);