パターンに従って、PHPとHTMLの両方を 1 つのファイルに格納します。
-HTML1
-PHP1
-HTML2
<-script>
-PHP2
</-/script> -
残りの HTML
PHP2セクションでは、配列を返すPHP1の関数を呼び出します。の値を取得できcount($arr)
ますが、配列内の値を出力できません。ブラウザーでソース コードを調べると、単に空の文字列として表示されます。
関数内のステートメントを PHP1 から PHP2 にコピーすると、すべてが機能します。配列の値を出力できます。
コードは次のとおりです。
<?
include('pathdata.php');
function getThePath($node1, $node2){ //pass strings
$n1 = $matchIDtoNum[$node1]; //get int (from pathdata)
$n2 = $matchIDtoNum[$node2];
$res = array();
$res[0] = $n1;
$res[1] = $n2;
return $res;
}
$node1='';
$node2='';
if($_GET["node1"]){
$node1 = $_GET["node1"];
}
if($_GET["node2"]){
$node2 = $_GET["node2"];
}
if ($node1!='' && $node2!=''){
$arr = getThePath($node1,$node2);
}
?>
<html>
<head><title>Paths</title>
<script>
function init(){
<?
echo ("document.getElementById('msg1').innerHTML = 'test';\n");
if($node1!='' && $node2!=''){
//$n1 = $matchIDtoNum[$node1];
//$n2 = $matchIDtoNum[$node2];
//$res = array();
//$res[0] = $n1;
//$res[1] = $n2;
//$arr=$res;
$num = count($arr);
$str = implode(' ', $arr);
echo ("document.getElementById('msg1').innerHTML = '$arr[0]';\n"); //Empty string
echo ("document.getElementById('msg2').innerHTML = '$str';\n"); //String with one space character
echo ("document.getElementById('msg3').innerHTML = '$num'+' '+'$node1'+' '+'$node2';\n"); //this always works
}
?>
}
</script>
</head>
<body onload="init()">
<h1>Given two Nodes, return Shortest Path</h1>
<form name="inputform" action="getpath.php" method="get">
<input type="text" name="node1" />
<input type="text" name="node2" />
<input type="submit" value="Submit" />
<input type="reset" value="Clear" />
<br/>
<p id ="msg1"></p>
<p id ="msg2"></p>
<p id ="msg3"></p>
<br/>
</form>
</body>
</html>
私がどこで間違っている可能性があるかについてのアドバイスはありますか?
ありがとう!
編集して追加: 私にとってうまくいった$matchIDtoNum;
のは、関数内にグローバルを配置することでした。すなわち
function getThePath($node1,$node2){
global $matchIDtoNum;
$n1 = $matchIDtoNum[$nd1];
//etc
}
これにより、期待される出力が得られました。
すべてのコメントと回答者に感謝します!