比较JavaScript和PHP变量

Comparing JavaScript and PHP variables

本文关键字:变量 PHP JavaScript 比较      更新时间:2023-09-26

我需要比较一个javascript变量和一个php变量

var other = <?php echo $element; ?>;
        if(exam == other){

这是比较这些变量的正确方法吗?它不起作用,但也许问题出在别的地方。该代码用于下面的函数excamTables()

function examTables(){
    var exam = this.value;
    console.log(exam);
    var resultArray = [];
    <?php foreach($exams as $element): ?>
    var other = <?php echo $element; ?>;
        if(exam == other){
            resultArray = <?php echo json_encode($subs[$element], JSON_PRETTY_PRINT); ?>;
        }
    <?php endforeach; ?>

        var strOption = "";
        strOption = "<table>";
        var keys1 = Object.keys(resultArray);
            keys1.forEach(function(item1){
                var keys2 = Object.keys(resultArray[item1]);
                keys2.forEach(function(items2){
                    var keys3 = Object.keys(resultArray[item1][items2]);
                        value = resultArray[item1][items2];/*Need to not repeat subjects. This should be done in php file when selecting from DB*/
                        strOption += "<tr><td>" + value + "</td></tr>";
                });
            });
        strOption += "</table>";
    var table = document.getElementById("examTables");
    var row = document.createElement("tr");
    var cell = document.createElement("td");
    cell.innerHTML = strOption;
    row.appendChild(cell);
    table.appendChild(row);
}
var checkboxes = document.getElementsByClassName('year');
    for(var index in checkboxes){
        //bind event to each checkbox
        checkboxes[index].onchange = examTables;
    }

这篇文章讨论了这个问题,并使用

echo json_encode($element);

我试过了,但是没有用,

function examTables(){
    var exam = this.value;
    console.log(exam);
    var resultArray = [];
    <?php foreach($exams as $element): ?>
    var other = <?php echo json_encode($element); ?>;
        if(exam == other){
            resultArray = <?php echo json_encode($subs[$element], JSON_PRETTY_PRINT); ?>;
        }else{
            resultArray = <?php echo json_encode($subs['AP'], JSON_PRETTY_PRINT); ?>;
        }
    <?php endforeach; ?>
        var strOption = "";
        strOption = "<table>";
        var keys1 = Object.keys(resultArray);
            keys1.forEach(function(item1){
                var keys2 = Object.keys(resultArray[item1]);
                keys2.forEach(function(items2){
                    var keys3 = Object.keys(resultArray[item1][items2]);
                        value = resultArray[item1][items2];/*Need to not repeat subjects. This should be done in php file when selecting from DB*/
                        strOption += "<tr><td>" + value + "</td></tr>";
                });
            });
        strOption += "</table>";
    var table = document.getElementById("examTables");
    var row = document.createElement("tr");
    var cell = document.createElement("td");
    cell.innerHTML = strOption;
    row.appendChild(cell);
    table.appendChild(row);
}

谢谢,

如果你想比较两个JSON对象,你应该考虑通过一个共同的属性值来评估相等性,否则你将不得不将它们都JSON.stringify并比较结果。

<?php $element = json_encode($anObject); ?>
var other = <?php echo $element; ?>;
if(JSON.stringify(exam) == JSON.stringify(other)) {
    // ...
}

<?php $element = json_encode($anObject); ?>
var other = <?php echo $element; ?>;
if(exam.prop == other.prop) {
    // ...
}

另一件事:你应该小心你如何在PHP中回显一个值,然后被JavaScript解释。例如:

这个PHP…

$element = "elementValue";
var other = <?php echo $element; ?>;

…生成以下JavaScript

var other = elementValue;

可以看到,PHP只是将字符串"elementValue"插入到页面中。但是当JavaScript来解释表达式var other = elementValue;时,它将期望elementValue是一个预定义的变量。为了避免这种情况,在PHP中通过将$element的值用引号括起来来回显它,因此我们有:

这个PHP…

$element = "elementValue";
var other = "<? echo $element; ?>";

…生成以下JavaScript

var other = "elementValue";

use

var other = "<?php echo $element; ?>";

代替

var other = <?php echo $element; ?>;

要检查是否在other中获取$element的值,使用alert(other);

现在可以用了。谢谢你的帮助,

function examTables(){
    var exam = this.value;
    var resultArray = [];
    var i = 0;
    <?php foreach($exams as $element): ?>
    other = <?php echo json_encode($element);?>;
    if(exam == other)
    {
         console.log("exam: " + exam + " is " + "element: " + other);
         resultArray = <?php echo json_encode($subs[$element], JSON_PRETTY_PRINT); ?>;
    }   
    console.log(resultArray);
    i++;
    <?php endforeach; ?>
        var strOption = "";
        strOption = "<table>";
        var keys1 = Object.keys(resultArray);
            keys1.forEach(function(item1){
                var keys2 = Object.keys(resultArray[item1]);
                keys2.forEach(function(items2){
                    var keys3 = Object.keys(resultArray[item1][items2]);
                        value = resultArray[item1][items2];
                        strOption += "<tr><td>" + value + "</td></tr>";
                });
            });
        strOption += "</table>";
    console.log(strOption);
    var table = document.getElementById("examTables");
    var row = document.createElement("tr");
    var cell = document.createElement("td");
    var tableinner = document.createElement("table");
    var rowinner = document.createElement("tr");
    var cellinner = document.createElement("td");
    cellinner.innerHTML = strOption;
    rowinner.appendChild(cellinner);
    tableinner.appendChild(rowinner);
    cell.appendChild(tableinner);
    row.appendChild(cell);
    table.appendChild(row);
}

谢谢