2015-08-15 95 views
1

我需要将一个JavaScript变量与一个php变量进行比较。比较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; 
    } 

这篇文章post讨论了这一点,并使用

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); 
} 

谢谢,

+0

你如何比较它们看起来确定。什么是返回$元素变量?使用var_dump。 – Ionut

回答

0

如果你想比较两个JSO N个对象,你应该考虑通过一个公共属性值来评估相等性,否则你将不得不对它们进行比较。

<?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是一个预先定义的变量。为了避免这种情况,在引号包围它呼应$element值在PHP,所以我们有:

这个PHP ...

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

......产生这个JavaScript的使用,而不是

var other = "elementValue"; 
0

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

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

要检查你是否得到其他,使用的警报$元素的值(其它);

0

现在就开始工作。感谢您的帮助,

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); 
} 

感谢