我有一个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>
答案 0 :(得分:0)
如果在渲染页面之前无法使用javascript ...顺序执行此操作。 有一种MVC的例子:
所以:
<?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);