- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对之前的线程/问题进行了跟进,希望可以通过对现有代码进行相对较小的更新来解决。在另一个线程/问题中,我几乎解决了对嵌套无序列表的需求。我需要根据主题的数量将嵌套的无序列表分成几列。
例如,如果数据库查询产生 6 个主题并且用户为布局指定了 2 列,则每列将有 3 个主题(以及其下方的相关新闻项)。
例如,如果数据库查询产生 24 个主题并且用户为布局指定了 4 列,则每列将有 6 个主题(以及其下方的相关新闻项)。
上一题的题目是PHP - Simple Nested Unordered List (UL) Array .提供的解决方案效果很好,但并不总是 split 正确。例如,当 $columns = 4 时,它只划分列分为 3 组。代码如下。
我想解决的另一个问题是由回答问题的先生。而不是把一切都存入内存,然后第二次迭代打印它out,我想运行两个查询:一个是查找唯一的 TopicNames 和一个用于查找中的总元素数列表。
我想解决的最后一件事是复制一组具有将嵌套无序列表分解为列的更新的代码基于新闻项的数量(而不是类别)。所以这这一秒可能只需要交换几个变量一组代码。
所以,我希望解决三个问题:
1.) 修复依赖类别数时的划分问题(无序列表按主题数分列)
2.) reshape PHP 代码以运行两个查询:一个查找唯一主题名称的数量,一个查找列表中的总元素数
3.) 创建一组重复的 PHP 代码,其工作依赖于新闻项的数量而不是类别(无序列表根据新闻项的数量分成列)
任何人都可以提供更新或指出正确的方向吗?非常感谢!
$columns = // user specified;
$result = mysql_query("SELECT * FROM News");
$num_articles = 0;
// $dataset will contain array( 'Topic1' => array('News 1', 'News2'), ... )
$dataset = array();
while($row = mysql_fetch_array($result)) {
if (!$row['TopicID']) {
$row['TopicName'] = 'Sort Me';
}
$dataset[$row['TopicName']][] = $row['NewsID'];
$num_articles++;
}
$num_topics = count($dataset);
// naive topics to column allocation
$topics_per_column = ceil($num_topics / $columns);
$i = 0; // keeps track of number of topics printed
$c = 1; // keeps track of columns printed
foreach($dataset as $topic => $items){
if($i % $topics_per_columnn == 0){
if($i > 0){
echo '</ul></div>';
}
echo '<div class="Columns' . $columns . 'Group' . $c . '"><ul>';
$c++;
}
echo '<li>' . $topic . '</li>';
// this lists the articles under this topic
echo '<ul>';
foreach($items as $article){
echo '<li>' . $article . '</li>';
}
echo '</ul>';
$i++;
}
if($i > 0){
// saw at least one topic, need to close the list.
echo '</ul></div>';
}
2011 年 12 月 19 日更新: 将数据处理与输出逻辑分开(对于“每列 X 主题变体”):
您好 Hakre:我已经勾勒出我的输出结构,但我正在努力将两个新函数与旧数据处理结合起来。下面的代码应该有效吗?
/* Data Handling */
$columns = // user specified;
$result = mysql_query("SELECT * FROM News LEFT JOIN Topics on Topics.TopicID = New.FK_TopicID WHERE News.FK_UserID = $_SESSION[user_id] ORDER BY TopicSort, TopicName ASC, TopicSort, NewsTitle");
$num_articles = 0;
// $dataset will contain array( 'Topic1' => array('News 1', 'News2'), ... )
$dataset = array();
while($row = mysql_fetch_array($result)) {
if (!$row['TopicID']) {
$row['TopicName'] = 'Sort Me';
}
$dataset[$row['TopicName']][] = $row['NewsID'];
$num_articles++;
}
/* Output Logic */
function render_list($title, array $entries)
{
echo '<ul><li>', $title, '<ul>';
foreach($entries as $entry)
{
echo '<li>', $entry['NewsID'], '</li>';
}
echo '</ul></li></ul>;
}
function render_column(array $topics)
{
echo '<div class="column">';
foreach($topics as $topic)
{
render_list($topic['title'], $topic['entries']);
}
echo '</div>';
}
最佳答案
你的两个问题都没有说明数据库表是什么,所以我不能具体回答,但会概述我的建议。
您可以使用 mysql 中的聚合函数来获取按主题(包括主题)排序和分组的新闻条目。他们的计数。您可以先进行两次查询以获取计数,这在一定程度上取决于您希望如何处理数据。
在任何情况下,使用 mysql_...
函数,您从数据库中选择的所有数据都将在内存中(由于内部结构甚至两次)。因此,由于 PHP 中的写时复制优化,在您之前的问题中拥有另一个数组应该不会造成太大伤害。只需少量开销即可有效。
接下来,在处理实际输出之前,您应该按顺序获取数据,这样您就不需要混合数据处理和输出逻辑。混合确实会使事情变得更复杂,因此更难解决。例如,如果您将输出放入简单的函数中,这会变得更容易:
function render_list($title, array $entries)
{
echo '<ul><li>', $title, '<ul>';
foreach($entries as $entry)
{
echo '<li>', $entry['NewsID'], '</li>';
}
echo '</ul></li></ul>;
}
function render_column(array $topics)
{
echo '<div class="column">';
foreach($topics as $topic)
{
render_list($topic['title'], $topic['entries']);
}
echo '</div>';
}
这已经解决了你的输出问题,所以我们不需要再关心它了。我们只需要关心将什么作为参数输入这些函数。
每列的 X 个主题变体:
对于这个变体,数据应该是一个数组,每个值一个主题,就像您对上一个问题所做的那样。我会说它已经解决了。不知道列数有哪个具体问题,计算看起来不错,所以我跳过它,直到您提供有关它的具体信息。 “不起作用”不合格。
每列变体的 X 个新闻元素:
这更有趣。此处的一个简单步骤是通过再次添加主题标题在下一栏中继续上一个主题。像这样的东西:
Topic A Topic A Topic B
- A-1 - A-5 - B-4
- A-2 Topic B - B-5
- A-3 - B-1 - B-6
- A-4 - B-2
- B-3
要实现这一点,您需要以不同方式处理数据,即按元素(新闻)计数。
假设您设法从数据库中检索分组(并因此排序)的数据:
SELECT TopicName, NewsID FROM news GROUP BY 1;
然后您可以遍历所有返回的行并创建您的列,最后输出它们(已经解决):
$itemsPerColumn = 4;
// get columns
$topics = array();
$items = 0;
$lastTopic = NULL;
foreach ($rows as $row)
{
if ($lastTopic != $row['TopicName'])
{
$topic = array('title' => $row['TopicName']);
$topics[] = &$topic;
}
$topic['entries'][] = $row;
$items++;
if ($items === $itemsPerColumn)
{
$columns[] = $topics;
$topics = array();
$lastTopic = NULL;
}
}
// output
foreach($columns as $column)
{
render_column($column);
}
所以这实际上与之前的答案相当,但这次您不需要重新排列数组来获取按主题排序的新闻,因为数据库查询已经这样做了(您可以为之前的答案这样做也回答)。
然后又是一样的:迭代返回的结果集并将数据放入可以输出的结构中。输入、处理、输出。总是一样的。
希望对您有所帮助。
关于PHP - 嵌套列表分成偶数列(修复和更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364358/
我将一个 div 设置为 100% 宽度,当以 1024 分辨率查看页面时,宽度应从 100% 变为 1000px,我让它与@media 查询一起正常工作,并且在 FF、safari chrome 上
希望有人能帮助我,我已经被困了几天了。 将我的 Domino 服务器更新到 9.01 Fix 3 后,我在 javascript 控制台上不断收到错误消息: TypeError: this.edito
我们正在使用一个基于RMI的java应用程序。当我们运行应用程序时,即使应用程序处于理想阶段,内存使用量仍然不断增加。我们主要使用Vector和散列图数据结构。如何最大限度地减少java内存使用/修复
概述 Internet Download Manager (IDM)是最流行的 Windows 下载管理器。如果你平时工作中使用过IDM,您会惊叹 IDM 下载文件的速度有多快。IDM
当我打开 brave 浏览器时,会打开一个窗口(如下所示)。它并没有真正干扰浏览器的处理。但令人担忧的是为什么这种情况一直发生...... Error On Opening Brave Browser
这是我今天在求职面试中被问到的一个问题: 看下面的代码: int n=20; for (int i =0; i
我不小心删除了/opt/local/bin/perl5.8.9 ,这似乎是 macports 编译的 perl 的主要二进制文件。 现在我有很多取决于 perl5 的端口,但不想卸载并重新安装所有端口
>>>flip fix (0 :: Int) (\a b -> putStrLn "abc") Output: "abc" 这是使用翻转修复的简化版本。 我在一些 YouTube 视频中看到了这种使用
这个问题已经有答案了: How can I fix 'android.os.NetworkOnMainThreadException'? (64 个回答) 已关闭 3 年前。 我在 Android 应
def main(): cash = float(input("How much money: ")) coins = 0 def changeCounter(n): whil
前一周我遇到了类似的问题,查询需要永远运行。在编写此查询时,我尝试应用从其他查询中学到的一些知识,但执行起来需要很长时间。 运行查询的两个单独部分时,每个部分需要 2 分钟才能完成,这是可以接受的,但
下午,我的 CSS 有问题。第三个下拉菜单放错了,我没有解决办法。 这是我想要的: 之前: http://i53.tinypic.com/2qu85z8.png 之后: http://i51.tiny
更新方法: override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingS
我知道这是一个很多人都遇到过的问题,但我不熟悉 Less 并且是 Bootstrap 的新手,我正在寻找一种全 CSS 解决方案来防止我的导航栏折叠到 768 像素以下:
在我的布局中,我创建了以下 jsfiddle 托管的可调整大小的粘性页脚。但是,在调整大小时它与内容重叠。有没有办法让它在所有浏览器上都能响应? http://jsfiddle.net/9aLc0mg
我想要实现的目标 racer-offset 是为了让用户可以设置图像可以以 px 为单位移动多远。偏移量管理偏移量。 Speed-racer 告诉我们图像在滚动过程中移动的速度。我的问题是它不会停止。
我有一个简单的自动换行函数,它接受一个长字符串作为输入,然后将该字符串分成更小的字符串,并将它们添加到一个数组中,以便稍后输出。现在最后一两个字没有输出。这是主要问题。但是,我还想改进功能。我知道这有
我试图在使用每个 slider 之前禁用“下一步”按钮,我不确定为什么在单击不再是 class="not-clicked"的同一个 slider 时取消禁用该按钮. JSFiddle: (这里看起来有
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 8 年前。 如何让程序输出所有信息? IT
On this page ,在“生活”下有一个带有自动生成的子菜单的菜单。子菜单存在一些问题(它会闪烁并改变大小——如果你滚动它就会看到)。我需要以某种方式覆盖它当前正在读取的 css 并使其统一。
我是一名优秀的程序员,十分优秀!