【问题标题】:PHP: Sort divs by classPHP:按类对 div 进行排序
【发布时间】:2016-10-29 19:53:31
【问题描述】:

我有一个 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>

【问题讨论】:

  • 您好,请查看此主题:stackoverflow.com/questions/17017148/…。当然,这是通过 javascript :)
  • @GeorgesO。它需要在 php 中
  • 好的。因此,您需要在渲染页面之前执行此操作:)
  • 嗨 Scriptim,您应该更清楚地说明您的问题。请在此处粘贴您的 php 代码。
  • @phper 你什么意思?

标签: php algorithm sorting


【解决方案1】:

如果您不能使用 javascript ... 在呈现页面之前订购。 一种 MVC 的示例:

  1. 主数据
  2. 渲染

所以:

<?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'];
}

我使用了一个二维数组。当然,您可以使用其他方式:

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

ksort($output);

foreach( $output as $row ) {
  echo $row;
}

【讨论】:

    【解决方案2】:

    如果由于某种原因您不能使用为您的班级命名的变量,我会使用正则表达式来完成此操作

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

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 2015-06-30
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多