PHP 多維數(shù)組
- PHP 表單完成
- PHP 日期
在本教程之前的章節(jié)中,我們已經(jīng)知道數(shù)組是一種數(shù)/值對的簡單列表。
不過,有時(shí)您希望用一個(gè)以上的鍵存儲值。
可以用多維數(shù)組進(jìn)行存儲。
PHP - 多維數(shù)組
多維數(shù)組指的是包含一個(gè)或多個(gè)數(shù)組的數(shù)組。
PHP 能理解兩、三、四或五級甚至更多級的多維數(shù)組。不過,超過三級深的數(shù)組對于大多數(shù)人難于管理。
注釋:數(shù)組的維度指示您需要選擇元素的索引數(shù)。
- 對于二維數(shù)組,您需要兩個(gè)索引來選取元素
- 對于三維數(shù)組,您需要三個(gè)索引來選取元素
PHP - 兩維數(shù)組
兩維數(shù)組是數(shù)組的數(shù)組(三維數(shù)組是數(shù)組的數(shù)組的數(shù)組)。
首先,讓我們看看下面的表格:
我們能夠在兩維數(shù)組中存儲上表中的數(shù)據(jù),就像這樣:
$cars = array
(
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
?文章來源地址http://www.zghlxwxcb.cn/news/detail-600839.html
現(xiàn)在這個(gè)兩維數(shù)組包含了四個(gè)數(shù)組,并且它有兩個(gè)索引(下標(biāo)):行和列。
如需訪問 $cars 數(shù)組中的元素,我們必須使用兩個(gè)索引(行和列):
實(shí)例
<?php
echo $cars[0][0].": 庫存:".$cars[0][1].", 銷量:".$cars[0][2].".<br>";
echo $cars[1][0].": 庫存:".$cars[1][1].", 銷量:".$cars[1][2].".<br>";
echo $cars[2][0].": 庫存:".$cars[2][1].", 銷量:".$cars[2][2].".<br>";
echo $cars[3][0].": 庫存:".$cars[3][1].", 銷量:".$cars[3][2].".<br>";
?>
我們也可以在 For 循環(huán)中使用另一個(gè) For 循環(huán),來獲得 $cars 數(shù)組中的元素(我們?nèi)孕枋褂脙蓚€(gè)索引):
實(shí)例
<?php
for ($row = 0; $row < 4; $row++) {
echo "<p><b>Row number $row</b></p>";
echo "<ul>";
for ($col = 0; $col < 3; $col++) {
echo "<li>".$cars[$row][$col]."</li>";
}
echo "</ul>";
}
?>
PHP 日期和時(shí)間
- PHP 多維數(shù)組
- PHP Include
PHP date() 函數(shù)用于對日期或時(shí)間進(jìn)行格式化。
PHP Date() 函數(shù)
PHP Date() 函數(shù)把時(shí)間戳格式化為更易讀的日期和時(shí)間。
語法
date(format,timestamp)
注釋:時(shí)間戳是一種字符序列,它表示具體事件發(fā)生的日期和事件。
獲得簡單的日期
date() 函數(shù)的格式參數(shù)是必需的,它們規(guī)定如何格式化日期或時(shí)間。
下面列出了一些常用于日期的字符:
- d - 表示月里的某天(01-31)
- m - 表示月(01-12)
- Y - 表示年(四位數(shù))
- 1 - 表示周里的某天
其他字符,比如 "/", "." 或 "-" 也可被插入字符中,以增加其他格式。
下面的例子用三種不同方法格式今天的日期:
實(shí)例
<?php
echo "今天是 " . date("Y/m/d") . "<br>";
echo "今天是 " . date("Y.m.d") . "<br>";
echo "今天是 " . date("Y-m-d") . "<br>";
echo "今天是 " . date("l");
?>
?
PHP 提示 - 自動(dòng)版權(quán)年份
使用 date() 函數(shù)在您的網(wǎng)站上自動(dòng)更新版本年份:
實(shí)例
? 2010-<?php echo date("Y")?>
獲得簡單的時(shí)間
下面是常用于時(shí)間的字符:
- h - 帶有首位零的 12 小時(shí)小時(shí)格式
- i - 帶有首位零的分鐘
- s - 帶有首位零的秒(00 -59)
- a - 小寫的午前和午后(am 或 pm)
下面的例子以指定的格式輸出當(dāng)前時(shí)間:
實(shí)例
<?php
echo "現(xiàn)在時(shí)間是 " . date("h:i:sa");
?>
注釋:請注意 PHP date() 函數(shù)會返回服務(wù)器的當(dāng)前日期/時(shí)間!
獲得時(shí)區(qū)
如果從代碼返回的不是正確的時(shí)間,有可能是因?yàn)槟姆?wù)器位于其他國家或者被設(shè)置為不同時(shí)區(qū)。
因此,如果您需要基于具體位置的準(zhǔn)確時(shí)間,您可以設(shè)置要用的時(shí)區(qū)。
下面的例子把時(shí)區(qū)設(shè)置為 "Asia/Shanghai",然后以指定格式輸出當(dāng)前時(shí)間:
實(shí)例
<?php
date_default_timezone_set("Asia/Shanghai");
echo "當(dāng)前時(shí)間是 " . date("h:i:sa");
?>
通過 PHP mktime() 創(chuàng)建日期
date() 函數(shù)中可選的時(shí)間戳參數(shù)規(guī)定時(shí)間戳。如果您未規(guī)定時(shí)間戳,將使用當(dāng)前日期和時(shí)間(正如上例中那樣)。
mktime() 函數(shù)返回日期的 Unix 時(shí)間戳。Unix 時(shí)間戳包含 Unix 紀(jì)元(1970 年 1 月 1 日 00:00:00 GMT)與指定時(shí)間之間的秒數(shù)。
語法
mktime(hour,minute,second,month,day,year)
下面的例子使用 mktime() 函數(shù)中的一系列參數(shù)來創(chuàng)建日期和時(shí)間:
實(shí)例
<?php
$d=mktime(9, 12, 31, 6, 10, 2015);
echo "創(chuàng)建日期是 " . date("Y-m-d h:i:sa", $d);
?>
通過 PHP strtotime() 用字符串來創(chuàng)建日期
PHP strtotime() 函數(shù)用于把人類可讀的字符串轉(zhuǎn)換為 Unix 時(shí)間。
語法
strtotime(time,now)
下面的例子通過 strtotime() 函數(shù)創(chuàng)建日期和時(shí)間:
實(shí)例
<?php
$d=strtotime("10:38pm April 15 2015");
echo "創(chuàng)建日期是 " . date("Y-m-d h:i:sa", $d);
?>
PHP 在將字符串轉(zhuǎn)換為日期這方面非常聰明,所以您能夠使用各種值:
實(shí)例
<?php
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "<br>";
$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "<br>";
?>
不過,strtotime() 并不完美,所以請記得檢查放入其中的字符串。
更多日期實(shí)例
下例輸出下周六的日期:
實(shí)例
<?php
$startdate = strtotime("Saturday");
$enddate = strtotime("+6 weeks",$startdate);
while ($startdate < $enddate) {
echo date("M d", $startdate),"<br>";
$startdate = strtotime("+1 week", $startdate);
}
?>
下例輸出七月四日之前的天數(shù):
實(shí)例
<?php
$d1=strtotime("December 31");
$d2=ceil(($d1-time())/60/60/24);
echo "距離十二月三十一日還有:" . $d2 ." 天。";
?>
PHP 文件處理
- PHP Include
- PHP 文件打開/讀取
PHP 操作文件
PHP 擁有的多種函數(shù)可供創(chuàng)建、讀取、上傳以及編輯文件。
注意:請謹(jǐn)慎操作文件!
當(dāng)您操作文件時(shí)必須非常小心。如果您操作失誤,可能會造成非常嚴(yán)重的破壞。常見的錯(cuò)誤是:
- 編輯錯(cuò)誤的文件
- 被垃圾數(shù)據(jù)填滿硬盤
- 意外刪除文件內(nèi)容
PHP readfile() 函數(shù)
readfile() 函數(shù)讀取文件,并把它寫入輸出緩沖。
假設(shè)我們有一個(gè)名為 "webdictionary.txt" 的文本文件,存放在服務(wù)器上,就像這樣:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
讀取此文件并寫到輸出流的 PHP 代碼如下(如讀取成功則 readfile() 函數(shù)返回字節(jié)數(shù)):
實(shí)例
<?php
echo readfile("webdictionary.txt");
?>
PHP 文件打開/讀取/關(guān)閉
- PHP 文件
- PHP 文件創(chuàng)建/寫入
在本節(jié)中,我們向您講解如何在服務(wù)器上打開、讀取以及關(guān)閉文件。
PHP Open File - fopen()
打開文件的更好的方法是通過 fopen() 函數(shù)。此函數(shù)為您提供比 readfile() 函數(shù)更多的選項(xiàng)。
在課程中,我們將使用文本文件 "webdictionary.txt":
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
fopen() 的第一個(gè)參數(shù)包含被打開的文件名,第二個(gè)參數(shù)規(guī)定打開文件的模式。如果 fopen() 函數(shù)未能打開指定的文件,下面的例子會生成一段消息:
實(shí)例
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>
提示:我們接下來將學(xué)習(xí) fread() 以及 fclose() 函數(shù)。
文件會以如下模式之一打開:
PHP 讀取文件 - fread()
fread() 函數(shù)讀取打開的文件。
fread() 的第一個(gè)參數(shù)包含待讀取文件的文件名,第二個(gè)參數(shù)規(guī)定待讀取的最大字節(jié)數(shù)。
如下 PHP 代碼把 "webdictionary.txt" 文件讀至結(jié)尾:
fread($myfile,filesize("webdictionary.txt"));
?
PHP 關(guān)閉文件 - fclose()
fclose() 函數(shù)用于關(guān)閉打開的文件。
注釋:用完文件后把它們?nèi)筷P(guān)閉是一個(gè)良好的編程習(xí)慣。您并不想打開的文件占用您的服務(wù)器資源。
fclose() 需要待關(guān)閉文件的名稱(或者存有文件名的變量):
<?php
$myfile = fopen("webdictionary.txt", "r");
// some code to be executed....
fclose($myfile);
?>
PHP 讀取單行文件 - fgets()
fgets() 函數(shù)用于從文件讀取單行。
下例輸出 "webdictionary.txt" 文件的首行:
實(shí)例
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fgets($myfile);
fclose($myfile);
?>
注釋:調(diào)用 fgets() 函數(shù)之后,文件指針會移動(dòng)到下一行。
PHP 檢查 End-Of-File - feof()
feof() 函數(shù)檢查是否已到達(dá) "end-of-file" (EOF)。
feof() 對于遍歷未知長度的數(shù)據(jù)很有用。
下例逐行讀取 "webdictionary.txt" 文件,直到 end-of-file:
實(shí)例
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 輸出單行直到 end-of-file
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>
PHP 讀取單字符 - fgetc()
fgetc() 函數(shù)用于從文件中讀取單個(gè)字符。
下例逐字符讀取 "webdictionary.txt" 文件,直到 end-of-file:
實(shí)例
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 輸出單字符直到 end-of-file
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?>
注釋:在調(diào)用 fgetc() 函數(shù)之后,文件指針會移動(dòng)到下一個(gè)字符。
PHP 文件創(chuàng)建/寫入
- PHP 文件打開/讀取
- PHP 文件上傳
在本節(jié)中,我們將為您講解如何在服務(wù)器上創(chuàng)建并寫入文件。
PHP 創(chuàng)建文件 - fopen()
fopen() 函數(shù)也用于創(chuàng)建文件。也許有點(diǎn)混亂,但是在 PHP 中,創(chuàng)建文件所用的函數(shù)與打開文件的相同。
如果您用 fopen() 打開并不存在的文件,此函數(shù)會創(chuàng)建文件,假定文件被打開為寫入(w)或增加(a)。
下面的例子創(chuàng)建名為 "testfile.txt" 的新文件。此文件將被創(chuàng)建于 PHP 代碼所在的相同目錄中:
實(shí)例
$myfile = fopen("testfile.txt", "w")
PHP 文件權(quán)限
如果您試圖運(yùn)行這段代碼時(shí)發(fā)生錯(cuò)誤,請檢查您是否有向硬盤寫入信息的 PHP 文件訪問權(quán)限。
PHP 寫入文件 - fwrite()
fwrite() 函數(shù)用于寫入文件。
fwrite() 的第一個(gè)參數(shù)包含要寫入的文件的文件名,第二個(gè)參數(shù)是被寫的字符串。
下面的例子把姓名寫入名為 "newfile.txt" 的新文件中:
實(shí)例
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
請注意,我們向文件 "newfile.txt" 寫了兩次。在每次我們向文件寫入時(shí),在我們發(fā)送的字符串 $txt 中,第一次包含 "Bill Gates",第二次包含 "Steve Jobs"。在寫入完成后,我們使用 fclose() 函數(shù)來關(guān)閉文件。
如果我們打開 "newfile.txt" 文件,它應(yīng)該是這樣的:
Bill Gates
Steve Jobs
PHP 覆蓋(Overwriting)
如果現(xiàn)在 "newfile.txt" 包含了一些數(shù)據(jù),我們可以展示在寫入已有文件時(shí)發(fā)生的的事情。所有已存在的數(shù)據(jù)會被擦除并以一個(gè)新文件開始。
在下面的例子中,我們打開一個(gè)已存在的文件 "newfile.txt",并向其中寫入了一些新數(shù)據(jù):
實(shí)例
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Mickey Mouse\n";
fwrite($myfile, $txt);
$txt = "Minnie Mouse\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
如果現(xiàn)在我們打開這個(gè) "newfile.txt" 文件,Bill 和 Steve 都已消失,只剩下我們剛寫入的數(shù)據(jù):
Mickey Mouse
Minnie Mouse
PHP 文件上傳
- PHP 文件創(chuàng)建/寫入
- PHP Cookies
通過 PHP,可以把文件上傳到服務(wù)器。
創(chuàng)建一個(gè)文件上傳表單
允許用戶從表單上傳文件是非常有用的。
請看下面這個(gè)供上傳文件的 HTML 表單:
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
請留意如下有關(guān)此表單的信息:
<form> 標(biāo)簽的 enctype 屬性規(guī)定了在提交表單時(shí)要使用哪種內(nèi)容類型。在表單需要二進(jìn)制數(shù)據(jù)時(shí),比如文件內(nèi)容,請使用 "multipart/form-data"。
<input> 標(biāo)簽的 type="file" 屬性規(guī)定了應(yīng)該把輸入作為文件來處理。舉例來說,當(dāng)在瀏覽器中預(yù)覽時(shí),會看到輸入框旁邊有一個(gè)瀏覽按鈕。
注釋:允許用戶上傳文件是一個(gè)巨大的安全風(fēng)險(xiǎn)。請僅僅允許可信的用戶執(zhí)行文件上傳操作。
創(chuàng)建上傳腳本
"upload_file.php" 文件含有供上傳文件的代碼:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
通過使用 PHP 的全局?jǐn)?shù)組 $_FILES,你可以從客戶計(jì)算機(jī)向遠(yuǎn)程服務(wù)器上傳文件。
第一個(gè)參數(shù)是表單的 input name,第二個(gè)下標(biāo)可以是 "name", "type", "size", "tmp_name" 或 "error"。就像這樣:
- $_FILES["file"]["name"] - 被上傳文件的名稱
- $_FILES["file"]["type"] - 被上傳文件的類型
- $_FILES["file"]["size"] - 被上傳文件的大小,以字節(jié)計(jì)
- $_FILES["file"]["tmp_name"] - 存儲在服務(wù)器的文件的臨時(shí)副本的名稱
- $_FILES["file"]["error"] - 由文件上傳導(dǎo)致的錯(cuò)誤代碼
這是一種非常簡單文件上傳方式?;诎踩矫娴目紤],您應(yīng)當(dāng)增加有關(guān)什么用戶有權(quán)上傳文件的限制。
上傳限制
在這個(gè)腳本中,我們增加了對文件上傳的限制。用戶只能上傳 .gif 或 .jpeg 文件,文件大小必須小于 20 kb:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
注釋:對于 IE,識別 jpg 文件的類型必須是 pjpeg,對于 FireFox,必須是 jpeg。
保存被上傳的文件
上面的例子在服務(wù)器的 PHP 臨時(shí)文件夾創(chuàng)建了一個(gè)被上傳文件的臨時(shí)副本。
這個(gè)臨時(shí)的復(fù)制文件會在腳本結(jié)束時(shí)消失。要保存被上傳的文件,我們需要把它拷貝到另外的位置:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
上面的腳本檢測了是否已存在此文件,如果不存在,則把文件拷貝到指定的文件夾。
注釋:這個(gè)例子把文件保存到了名為 "upload" 的新文件夾。
文章來源:http://www.zghlxwxcb.cn/news/detail-600839.html
?
到了這里,關(guān)于PHP高級教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!