从数据库结果中查找JS数组

时间:2014-04-10 13:34:39

标签: javascript php jquery

我有一个简单的数据库表( 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 Name

Class 7 Name

它将显示类名而不仅仅是数字。

可以通过javascript数组中行的位置安全地完成(因此数组中空的第一个EntryClass)。

我的猜测是它可以通过回显类号(将分割字符串并在循环中回显它们)来完成,之后可以运行JS函数来交换完整类名的数字。但是,我有点困惑如何做到这一点。或者,如果有更好的方法!

非常感谢任何帮助/建议。

2 个答案:

答案 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;
        }

    });