PHP陣列

程式裡常常會出現陣列,不管是一維、二維、多維陣列,每每遇到陣列,我總是搞不清楚什麼是index,key,value。目前稍微懂一點,做一下筆記吧!

範例

$week=array(
'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');

我們可以利用索引值來取得值,$week[0]值就是Monday。

0就是索引(index)    Monday就是值(value)

while迴圈去取值

while (list ($key,$value) = each ($week)){
   print $value;
   //印出Monday Tuesday Wednesday Thursday Friday Saturday Sunday
}

for 迴圈去取值

for ($i = 0 ; $i < count($week); $i++){
   print $week[$i];
   //印出Monday Tuesday Wednesday Thursday Friday Saturday Sunday
}

foreach陣列迴圈去取值

格式
foreach($陣列名稱 as $陣列元素變數)
{
echo $陣列元素變數;
}
foreach ($week as $key => $value){
   print $value;
}
   //印出Monday Tuesday Wednesday Thursday Friday Saturday Sunda
<?php
$array0 = array($row0= array(1,2),
$row1=array(3,4),
$row2=array(5,6));
$array1 = array($row3=array(7,8),
$row4=array(9,10),
$row5=array(11,12));
$array2 = array($row6=array(13,14),
$row7=array(15,16),
$row8=array(17,18));
$cubical = array($array0, $array1, $array2);

foreach ($cubical as $array)
{
foreach ($array as $row)
{
foreach ($row as $element)
{
echo $element."\t";
}
echo "|\t";
}
echo "<br>";
}
?>

印出

結合陣列

格式
$變數名稱["指定名稱"] = 陣列元素的值;

範例
<?php
$array["number1"] = 1;
$array["number2"] = 2;
$array[] = 3;
foreach ($array as $element)
{
echo $element."<br>";
}
?>

陣列相關函數

函數名稱說明
print_r($array)輸出陣列中每個元素索引或鍵值與元素內的值。
array_keys($array)回傳陣列中所有的索引或鍵值。
array_values($array)回傳陣列中所有元素的值。
current($array)回傳目前指標所在陣列元素的值。
key($array)回傳目前指標所在陣列元素的索引或鍵值。
each($array)回傳目前陣列元素的索引或鍵值和元素內的值,並移動自下一個元素。
reset($array)陣列指標回到第一個陣列元素。
end($array)陣列指標指到最後一個陣列元素。
next($array)陣列指標指向下一個陣列元素。
prev($array)陣列指標指向前一個陣列元素。
<?php
$array["a"] = 1; //新增結合陣列元素
$array[] = 2; //新增陣列元素
$array["b"] = 3; //新增結合陣列元素
$arrat[] = 4; //新增陣列元素

echo "1.\t";
print_r($array); //輸入陣列中每個元素索引或鍵值與元素的值
echo "<br>2.\t";
print_r(array_keys($array)); //輸出陣列中所有的索引或鍵值
echo "<br>3.\t";
print_rarray_values($array)); //輸出陣列中所有元素的值
echo "<br>4.\t";
echo current($array); //回傳目前指標所在陣列元素的值
echo "<br>5.\t";
echo key($array); //回傳目前指標所在元素的索引或鍵值
echo "<br>6.\t";
print_r(each($array)); //回傳目前的陣列元素的索引或鍵值和元素內
//的值,並移動自下一個元素
echo "<br>7.\t";
echo reset($array); //陣列指標回到第一個元素
echo "<br>8.\t";
echo end($array); //陣列指標回到最後一個元素
echo "<br>9.\t";
echo prev($array); //陣列指標指向前一個元素
echo "<br>10.\t";
echo next($array); //陣列指標指向下一個元素

陣列元素排序

函數使用格式說明
sort(陣列變數名稱)陣列元素的值從小到大排序。
rsort(陣列變數名稱)陣列元素的值從大到小排序。
asort(陣列變數名稱)結合陣列元素的值由小到大排序。
arsort(陣列變數名稱)結合陣列元素的值由大到小排序。
ksort(陣列變數名稱)結合陣列索引或鍵值由小到大排序。
krsort(陣列變數名稱)結合陣列索引或鍵值由大到小排序。
sort/rsort與asort/arsort 的差別,在於sort/rsort排序時,元素的索引或鍵值並不會留下來,並從0開始重新排序,而asort/arsort則會保留對應的索引或鍵值。

陣列元素搜尋

函數使用格式說明
in_array(數值,陣列變數名稱)檢查值是否在陣列元素中,傳回布林值。
array_search(數值,陣列變數名稱)檢查數值是否在陣列中,如果是,傳回鍵值,若沒有則傳回false。

範例

PHP 把資料寫入txt檔

把資料寫入txt檔有點複雜,學問有點大,而且發現換行的符號在不同系統是不一樣的,因此紀錄一下。

函式

file_exits()

檔案是否存在 傳回值1,0

file_open() 打開檔案

參數
“r” 開啟為可讀取,檔案指標位於檔案開頭
“r+” 開啟為可讀寫,檔案指標位於檔案開頭
“w” 開啟為可寫入,檔案指標位於檔案開頭。若檔案已存在,則刪除其內容,若不存在則建立該檔案。
“w+” 開啟為可讀寫,檔案指標位於檔案開頭。若檔案已存在,則刪除其內容,若不存在則建立該檔案。
“a” 開啟為可寫入,檔案指標位於檔案結尾。若檔案不存在,則建立。
“a+” 開啟為可讀寫,檔案指標位於檔案結尾。若檔案不存在,則建立。

fclose() 檔案關閉

Windows 系統換行符號是:  \r\n

Mac 系統換行符號是:  \r

Linux 系統換行符號是: \n

搭個便車吧!

免費SSL

何謂SSL

為了讓使用者於瀏覽網頁時安全地傳輸資料,特別是具備後台管理或輸入個人機敏資料的網站,應該使用網站資料傳輸加密協定(如HTTPS),透過SSL憑證加密後讓資料傳輸更安全,並且若網站升級採用新一代的HTTP/2的網頁傳輸協定,其先決條件就是必須使用HTTPS加密。

一般而言要使用加密傳輸,若不是使用系統自發憑證(使用Chrome瀏覽器閱讀時會出現「不安全的憑證」),便需要向第三方以支付年費方式購買SSL憑證,本說明將提供於伺服器上安裝免費的憑證(以Let’s Encrypt為例)教學文件,為大家的網頁傳輸加密。          資料參考:師大資訊中心

申請及使用

Let’s Encrypt是由各大非營利團體為了推廣 HTTPS 而推出免費 SSL/TLS憑證服務,每次申請有效期為3個月,並可設定自動更新憑證。

我是主機的擁有者,所以選擇安裝Certbot軟體。

1.選擇 apache+Linux(snap)

2.ssh登入主機安裝snapd

sudo apt update
sudo snap install --class certbot

3.Prepare the Certbot command

sudo ln -s /snap/bin/certbot /usr/bin/certbot

4.Choose how you’d like to run Certbot

sudo certbot --apache

5.Test automatic renewal

sudo certbot renew --dry-run

後記:

安裝後運動程式會有問題,必須下判斷式去判斷。

發現網站加了SSL後,運動網站有點問題。
目前解決方式:
/include/config.php
加上判斷
//URL
if($_SERVER["HTTP_HOST"]=="wwesbake.idv.tw"){
   define('ROOT_URL' , "https://". $_SERVER["HTTP_HOST"] ."/$web_name/") ; 
}else{
   define('ROOT_URL' , "http://". $_SERVER["HTTP_HOST"] ."/$web_name/") ;
}

除了要加判斷式之外,登入時轉址還會出現錯誤。檔案在:/var/log/apache2 的 error.log檔

造成網頁出不來,移除Certbot,卻出現無法執行apache2的情形。

重裝apache2連帶影響php5.5,到我的google網站去看教學。安裝了php5,只有裝部份的php5模組,真是糟糕!爬一爬文章,再加上自己的判斷,終於是在10/13晚上裝好了,可是自己的網站還是不行。不過,phpmyadmin竟然可以跑,心比較平靜一點,因為資料還在就好。抱著忐忑的心去睡覺吧!

早上(10/14)起床,突然想一想應該是php.ini設定的問題。果然是

Short_open_tag 要設定on
display_errors 設定on
php.ini 檔案位置

設定好就可以執行了。