我正在开发一个用于客户大厅的留言板。
“rundown”是从PHP创建的JSON,每5分钟通过一次AJAX调用检查更新。从包含项目,持续时间以及开始和停止时间的MySQL数据库填充纲要。 JQuery遍历内容然后循环到数据的开头。目前列表中没有重复的项目。
已经请求了一个加权系统,这样当一个重要的项目($$$客户,员工会议等)出现时,它会更频繁地出现在列表中(而不是只发生一次,直到循环发生)。
我已经在数据库中添加了一个权重列,但我在查找如何在最终的数组构建中实现它时遇到了麻烦:
$i = 0;
foreach ($rundown_standard as $item) {
$return[$i]["playlist_id"] = $i;
$return[$i]["item_id"] = $item["id"];
$return[$i]["weight"] = $item["weight"];
$return[$i]["duration"] = $item["duration"];
$return[$i]["template"] = $item["template"];
$return[$i]["headline"] = htmlentities($item["headline"]);
$content = $helper->isJson($item["content"]);
if ($content) {
$return[$i]["content"] = $content;
} else {
$return[$i]["content"] = str_replace(array('{images_path_absolute}', '{images_path_relative}'), array(IMAGES_PATH_ABSOLUTE, IMAGES_PATH_RELATIVE), $item["content"]);
}
i++;
}
$return
是我发送到调用此函数的函数的格式化数据。
默认权重为0
,这意味着它只应按照添加到数组中的顺序显示一次,权重为90
的内容应显示在每个其他项目之后。
我已尝试设置另一个计数器变量然后插入项目并重置计数器,这只适用于一个加权项目,但不适用于多个加权项目
清除泥土?
感谢您的任何建议。
编辑17:45:JavaScript只是动态更新页面;迭代JSON并将下一个项目附加到列表中:
if (window.item_content[i].template == "1") {
return '<div class="featured-item" id="featured-item-'+window.item_content[i].playlist_id+'"><img src="'+window.item_content[i].content+'" /></div>';
}
这是我的问题所在的数组,如果要插入多个元素,我应该如何以指定的间隔插入元素。
答案 0 :(得分:1)
听起来你知道如何编码,只需要一个算法,所以我会给你一些伪代码。如果你需要我把它变成更好的代码,我可以这样做。
return
和highPriority
。 return
不会关心体重,highPriority
会。{/ li>
return
,将所有其他权重放入highPriority
。highPriority
,从最低到最高。 highPriority
中的Foreach项目,数学结果很简单,但来自典型的“规范化和缩放”操作:标准化权重(n = weight / 90
),然后将其缩放到大小数组(n *= return.length
)的数量,以查找要添加到数组中的项目数。然后,要查找在return
数组中分配项目所需的空间,您可以执行return.length / n
。不过,这简单地归结为90/weight
!
var step = 90 / item.weight;
for (var i = 0; i <= 90; i += step) place item at i[step]
注意事项:
step
将针对每个元素进行更改,因为return.length在每次迭代中都会发生变化,但由于我们最后添加了最高优先级,因此它们仍将获得最高优先级。i <= 90
确保这些加权值至少出现两次。如果只有i < 90
,且重量为1,我们最终只能得到一个项目,而权重1应该与权重0不同。Math.floor
或Math.ceiling
。检查边缘情况(比我更好)!这应该让你去。希望它有所帮助!