我有一个简单的数据库表( entries ),其中有几列, name 和 classes 。
还有一个javascript数组如下:
function EntryClass(type, attr, classname, desc, price) {this.type = type;this.attr = attr;this.classname = classname;this.desc = desc;this.price = price;}
var cls = [
new EntryClass("", "", "", 0),
new EntryClass("simple", "adult", "Class 1 Name", "Cls1 Desc", 100),
new EntryClass("advanced", "junior", "Class 2 Name", "Cls2 Desc", 200),
...
]
我选择了表格中的所有行:
foreach($db->query('SELECT * FROM entries ORDER BY name ASC') as $row) {
echo '<h3>'.$row['name'].'</h3>';
echo '<p>'.$row['classes'].'</p>';
}
由于数据库的填充方式,数据库中的“classes”字段是一个整数字符串。例如:1 3 7
我不是只是回显数字列表,而是试图对类名(来自javascript数组)进行查找,这样我就能回应:
Class 1 Name
< p> Class 3 NameClass 7 Name
它将显示类名而不仅仅是数字。
可以通过javascript数组中行的位置安全地完成(因此数组中空的第一个EntryClass)。
我的猜测是它可以通过回显类号(将分割字符串并在循环中回显它们)来完成,之后可以运行JS函数来交换完整类名的数字。但是,我有点困惑如何做到这一点。或者,如果有更好的方法!
非常感谢任何帮助/建议。
答案 0 :(得分:0)
您的说明听起来就像这些类只在您的javascript中定义。你需要有一个PHP等价物。
$classes = array(
0 => array("type" => "", "attr" => "", "classname" => "", "desc" => "", "price" => 0),
1 => array("type" => "simple", "attr" => "adult", "classname" => "Class 1 Name", "desc" => "Cls1 Desc", "price" => 100),
2 => array("type" => "simple", "attr" => "adult", "classname" => "Class 2 Name", "desc" => "Cls2 Desc", "price" => 200)
);
foreach($db->query('SELECT * FROM entries ORDER BY name ASC') as $row) {
echo "<h3>" . $row['name'] . "</h3>";
foreach(explode($row['classes'], " ") as $class_id) {
// You may want to test if $class_id is a valid key first
echo "<p>Class " . $class_id . " " . $classes[$class_id]["classname"] . "</p>";
}
}
答案 1 :(得分:0)
这很有效。但问题是你做后期处理。不是最好的解决方案。 id也指向数组位置。也许考虑一下你的EntryClass中的一个ID和一个函数getClassNameById。或者仅在可选的情况下在PHP中执行。
$(document).ready(function($) {
function EntryClass(type, attr, classname, desc, price) {
this.type = type;
this.attr = attr;
this.classname = classname;
this.desc = desc;
this.price = price;
}
var cls = [
new EntryClass("", "", "", 0),
new EntryClass("simple", "adult", "Class 1 Name", "Cls1 Desc", 100),
new EntryClass("advanced", "junior", "Class 2 Name", "Cls2 Desc", 200)
];
var $classes = $('.classes');
$classes.each( swapClassName );
function swapClassName(){
var classStr = '';
var classIds = this.innerHTML.split(' '); // will get an array of IDs
// walk IDs
for( var i = 0; i < classIds.length; i++ ) {
//get the name on position <classIds[i]>
classStr += cls[classIds[i]].classname+'<br>';
};
this.innerHTML = classStr;
}
});