0

パターンに従って、PHPHTMLの両方を 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
}

これにより、期待される出力が得られました。

すべてのコメントと回答者に感謝します!

4

2 に答える 2

0

うーん..この行で:

$n1 = $matchIDtoNum[$node1]; //get int (from pathdata)

$matchIDtoNumから配列値を取得したいようです。関数として呼び出さない限り、関数の外部から配列値を取得することはできません。たとえば、次のようにします。

$n1 = getMatchIDtoNum($node1); // get int (from pathdata)

ファイルpathdata.phpには、次のような行があります。

function getMatchIDtoNum($arg){
      // Your code here
      return $matchIDtoNum[$arg];
}
于 2012-07-25T05:04:54.347 に答える
0

$node1 と $node2 をグローバル変数として使用します。お気に入り

function getThePath(){ //don't pass strings 
    global $node1, $node2;
    .....
}

//call function as
$arr = getThePath();

これで配列を取得できます

于 2012-07-25T04:56:10.980 に答える