如何向PHP陣列中頭部和尾部添加元素
array_push()函式將陣列當成一個堆疊,將傳入的變數壓入該陣列的末尾,該陣列的長度將隨著入堆疊變數數目的增加而增加,回傳陣列新的單元總數,
<?php $arr = [1,2,3,4]; array_push($arr,6,7); print_r($arr);
輸出結果為:

另一種更簡單的添加陣列元素的方式,對于數字下標陣列:
<?php $arr = [1,2,3,4]; $arr[] = 5; $arr[] = 6; print_r($arr);
關聯陣列可以在方括號里加上key
<?php $arr = [1,2,3,4]; $arr[] = 5; $arr['num'] = 6; print_r($arr);

array_unshift頭部添加元素
<?php $arr = [1,2,3,4]; array_unshift($arr,-1,-2); print_r($arr);
輸出的結果為:

如何洗掉PHP陣列中頭部,尾部,任意元素
洗掉末尾元素:array_pop
就像子彈的彈夾一樣,最后壓入的子彈是最先彈出的,在計算機術語里,我們稱之為先進后出堆疊
既然array_push是往陣列的末尾添加元素,那么array_pop就是從陣列的末尾洗掉一個元素,
array_pop()函式獲取并回傳陣列的最后一個元素,并將整個陣列的長度減 1 ,如果陣列為空(或者不是陣列),那么回傳的就是 null,
<?php $arr = [1,2,3,4]; $str = array_pop($arr); print_r($arr); echo $str;
輸出結果為:

洗掉頭部元素:array_shift
除了先進后出外,計算機中還有一種叫先進先出堆疊,可以看作是一個管道,先進去的元素最先出來
既然array_pop可以從陣列最后開始彈出元素,那么應該有函式可以從陣列的頭開始彈出元素,我們使用array_shift
<?php $arr = [1,2,3,4]; $str = array_shift($arr); print_r($arr); echo $str;

洗掉任意陣列中元素
上面我們介紹了怎么洗掉陣列中頭部和尾部的元素,洗掉任意陣列中的元素比前兩個都簡單,洗掉任意元素可以直接使用unset就行了!
<?php $arr = [1,2,3,4]; unset($arr[2]); print_r($arr);
輸出結果為:

說明:上面洗掉的是索引陣列,索引陣列可以按指定下標洗掉,關聯陣列洗掉元素,可以按照key來洗掉指定的元素!
下面實體就是如何洗掉關聯陣列中的元素
<?php $arr = [ 'id'=>1, 'name'=>'cyy' ]; unset($arr['name']); print_r($arr);
輸出結果為:

unset 可以洗掉任意的變數或陣列
<?php $arr = [ 'id'=>1, 'name'=>'cyy' ]; unset($arr); var_dump($arr);

如何洗掉PHP陣列中的重復元素
array_unique()函式,將陣列元素的值作為字串排序,然后對每個值只保留第一個鍵名,忽略所有后面的鍵名,就是洗掉陣列中重復的元素
<?php $arr = [1,2,3,4,2,7]; print_r($arr); $newarr = array_unique($arr); print_r($newarr);

array_unique()函式只適用于一維陣列,對多維陣列并不適用,不過你可以在二維陣列中的值,用array_unique()即可,
下面實體就是使用array_unique()函式實作洗掉二維陣列的重復元素,具體代碼如下:
<?php $arr = [ [1,2,3,4,2,3], [11,22,33,22,55] ]; $tmparr = []; foreach($arr as $k=>$v){ $tmparr[$k] = array_unique($v); } $arr = $tmparr; print_r($arr);
輸出結果為:

php陣列中foreach遍歷陣列的使用實體詳解
foreach遍歷陣列兩種語法:
foreach (array_expression as $value) statement foreach (array_expression as $key => $value) statement
注意:當 foreach 開始執行時,陣列內部的指標會自動指向第一個單元,這意味著不需要在 foreach 回圈之前呼叫 reset(),
注意:除非陣列是被參考,foreach 所操作的是指定陣列的一個拷貝,而不是該陣列本身,foreach對陣列指標有些副作用,除非對其重置,在 foreach 回圈中或回圈后都不要依賴陣列指標的值,
自 PHP 5 起,可以很容易地通過在 $value 之前加上 & 來修改陣列的元素,此方法將以參考賦值而不是拷貝一個值,
不改變原陣列:
<?php $arr = [1,2,3]; $newarr = []; foreach($arr as $v){ $v = $v*2; $newarr[] = $v; } print_r($arr); print_r($newarr);
改變原陣列:
<?php $arr = [1,2,3]; foreach($arr as &$v){ $v = $v*2; } print_r($arr);
unset($v);

注意:陣列最后一個元素的 $value 參考在 foreach 回圈之后仍會保留,建議使用 unset() 來將其銷毀,foreach 不支持用“@”來抑制錯誤資訊的能力,
下面先遍歷一下,基本的二維陣列:
<?php $arr = [ [1,2,3], [11,22,33] ]; foreach($arr as &$v){ print_r($v); }
遍歷結果如下:

此外,經常會出現要求將二維陣列某一列變為一維陣列,此時要將value中對應的欄位取出,放在一維陣列中,若是用for回圈操作,比較繁瑣,用foreach較為簡單,如下,獲取當前陣列的id列,和name列,分別存放在一維陣列中:
<?php $arr = [ [ 'id'=>1, 'name'=>'cyy1' ], [ 'id'=>2, 'name'=>'cyy2' ] ]; $idArr = []; $nameArr = []; foreach($arr as $k=>$v){ $idArr[] = $v['id']; $nameArr[] = $v['name']; } print_r($idArr); print_r($nameArr);
遍歷結果為:

PHP綜合運用陣列函式-實作多檔案上傳
要使用PHP實作檔案上傳功能,我們先來撰寫兩個php檔案:index.php和upload.php,其中,index.php頁面用于提交檔案上傳的表單請求,upload.php頁面用于接收上傳的檔案并進行相應處理,
首先,我們來撰寫一個簡單的index.php檔案,由于其中涉及的主要是html代碼,比較簡單,因此不再贅述,index.php頁面的詳細代碼如下:
<?php header("Content-Type:text/html;charset=utf-8"); ?> <!DOCTYPE html> <html> <head> <title>上傳檔案</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> 檔案1:<input type="file" name="upload_file[]"><br> 檔案2:<input type="file" name="upload_file[]"><br> <input type="submit" value="上傳"> </form> </body> </html>
值得注意的是,由于在HTTP協議設計之初,它并不支持檔案上傳功能,form表單的encrypt屬性的默認值為application/x-www-form-urlencoded,它只能用于提交一般的表單請求,如果提交的表單中包含需要上傳的檔案,我們需要將enctype的屬性值改為multipart/form-data才能實作檔案上傳功能,此外,method的屬性值必須為post,
接著,我們繼續撰寫upload.php檔案的代碼,
<?php header("Content-Type:text/html;charset=utf-8"); $files = $_FILES['upload_file']; $upload_dir = 'D:/phpstudy_pro/WWW/demo/uploads/'; foreach($files['error'] as $k=>$error){ if($error == 0){ $tmp_name = $files['tmp_name'][$k]; $file_name = $files['name'][$k]; move_uploaded_file($tmp_name,$upload_dir.$file_name); echo '[檔案'.$k.']上傳成功<br>'; }else{ echo '[檔案'.$k.']上傳失敗<br>'; } }
結果

備注1:在PHP的默認配置下,上傳的檔案大小超出一定的范圍將會出錯
備注2:上述處理檔案上傳的PHP代碼只是一個簡單的入門示例,并不能直接作為正式代碼使用,因為還有許多需要額外注意的安全因素沒有考慮,例如:檔案的型別、檔案的大小以及上傳檔案的名稱重復等,
備注3:如果上傳的檔案名稱中包含中文,可能引起檔案名稱亂碼問題,此時,需要使用函式iconv()來轉換檔案名稱的編碼.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40938.html
標籤:PHP
下一篇:php面向物件方法
