2013-09-01 66 views
1

我寫了這個php函數來動態地將默認日期插入到下拉選項標籤中。在我所謂的pickDate函數中,用雙引號在末尾回顯字符串。然後在我的代碼中,我有一個for循環,產生一個新的字符串,並在我想要調用我的函數的字符串內部。 我的問題是,當我在我的字符串中調用pickDate()時,它將呈現pickdate()(字面上),而不是函數的結果。看着我的代碼,我的問題是:如何在由雙引號括起來的字符串中調用函數。如何使用PHP調用字符串中的函數

這裏是我的函數看起來像:

<?php 
function pickDate() { 
$dayArray=array(); 
global $month; 
global $day; 
$monthArray=array(); 

$d=1; 
$monthArray=array('January','February','March','April','May','June','July','August','September','October','November','December'); 

$monthOption .="<select name='month'>"; 

for($i=0; $i<31; $i++){ 
array_push($dayArray, "$d"); 
$d++; 
} 
for($i=0; $i<12; $i++){ 

$selected=""; 

if ($month == "$monthArray[$i]") { 
$selected="selected='selected'"; 
} 
$monthOption .="<option value='$monthArray[$i]' 
$selected>$monthArray[$i] </option>"; 



} 

$monthOption.="</select> <select name='day'>"; 

for($i=0; $i<31; $i++){ 

$selected=""; 

if ($day == "$dayArray[$i]") { 
$selected="selected='selected'"; 
} 
$monthOption .="<option value='$dayArray[$i]'$selected>$dayArray[$i] </option>"; 



} 

$monthOption.="</select>"; 

echo "$monthOption"; 

}//end function 
?> 

我的功能工作正常。我想知道我怎麼能在這稱之爲串在以下循環:

<?php 
$xml = simplexml_load_file("gallery.xml"); 
$c1=count($xml->Picture); 


for($i=0; $i<$c1; $i++){ 
$month =(string)$xml->Picture[$i]->picDate->month; 
$day =(string)$xml->Picture[$i]->picDate->day; 
$year =(string)$xml->Picture[$i]->picDate->year; 


$displayFolder .="<form action='gallery.php' enctype='multipart/form-data' method='post' name='editPic' 

id='editPic'><tr><td> 
pickDate() 
<input type ='text' name='year' size='4'maxlength='4' 

value='$year'/></form></td> </tr>"; 

} 

?> 

然後我輸出一個HTML表格下方的displayfolder字符串:

<table border= "1px"><tr><td><?php 

print"$displayFolder";?></table> 

所以問題再次呼喚pickDate函數導致它在一個字符串中,我想知道如何將pickDate()結果放在表中。我喜歡它是如何被雙引號包圍的。有人可以告訴我如何在字符串中正確調用函數,而不必更改我的字符串。

+0

作爲額外的提示,而不是依靠全局變量,只需傳遞必要的p參數到你的函數:定義爲'函數pickDate($ month,$ day){...}'並且調用爲'pickDate($ month,$ day);'。這樣,你可以用不同的變量和其他函數等多次調用它。 – IMSoP

+0

非常感謝大家的快速提示和答案。這是有道理的。它很好地瞭解更多功能如何工作。我希望這個功能足夠清晰,對除我以外的人有用。 stackoverflow很棒。 – james

+0

@james如果答案適用於您或解決了問題,請將該答案標記爲可幫助其他人的答案;) – iJade

回答

4

替換此:

$displayFolder .="<form action='gallery.php' enctype='multipart/form-data' method='post' name='editPic' 

id='editPic'><tr><td> 
pickDate() 
<input type ='text' name='year' size='4'maxlength='4' 

value='$year'/></form></td> </tr>"; 

有了這個:

$displayFolder .="<form action='gallery.php' enctype='multipart/form-data' method='post' name='editPic' 

id='editPic'><tr><td> 
".pickDate()." 
<input type ='text' name='year' size='4'maxlength='4' 

value='$year'/></form></td> </tr>"; 

上面使用連接運算符(點)的字符串的其餘部分隔離的pickDate()功能所需的唯一變化。此外,爲了使其工作,您的pickDate()函數必須返回其結果而不是直接輸出,否則只要定義$displayFolder就會輸出其內容。爲了解決這個問題,更換此:

echo "$monthOption"; 

有了這個:

return $monthOption; 
+0

使用此解決方案時,只要$ displayFolder被定義,就會打印出pickdate,這是一種不理想的效果。 – amenadiel

+0

對不起,沒有看到'pickDate()'直接回聲而不是返回。我會更新我的答案。 –

+0

解釋你在代碼中改變了什麼以及爲什麼,而不是讓讀者在代碼塊之前和之後「發現差異」,這也是一個好主意。 – IMSoP

1
  • 不使用功能呼應的東西,這通常給你上的是打印字符串較少的地方控制。只需返回東西,然後決定你想要打印的地方。

而不是

echo "$monthOption"; 

嘗試

return $monthOption; 
  • 你是不是評估你的字符串中的功能。無論是將其括在小鬍子,甚至更好,分割你的字符串:

而不是

$displayFolder .="<form action='gallery.php' enctype='multipart/form-data' method='post'  name='editPic' id='editPic'><tr><td> 
pickDate() 
<input type ='text' name='year' size='4'maxlength='4' 
value='$year'/></form></td> </tr>"; 

嘗試

$displayFolder .="<form action='gallery.php' enctype='multipart/form-data' method='post'  name='editPic' id='editPic'><tr><td>"; 
$displayFolder .=pickDate(); 
$displayFolder .="<input type ='text' name='year' size='4'maxlength='4' 
value='$year'/></form></td> </tr>"; 
+0

這種分割技術使得過度冗長,特別是如果他必須在字符串中使用多個函數。 –

0

在字符串連接PHP函數一樣

$str = "left string".pickDate()."right string"; 
相關問題