2015-08-15 91 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); 
} 

感謝