若是沒有先宣告 $arr=array();
會出現array_push() expects parameter 1 to be array, null 連結
解決方式:
用 $arr[]=$add_item,代替用array_push($arr, $add_item),就不會出現錯誤。
若是沒有先宣告 $arr=array();
會出現array_push() expects parameter 1 to be array, null 連結
解決方式:
用 $arr[]=$add_item,代替用array_push($arr, $add_item),就不會出現錯誤。
可變變數是一個滿酷的用法,適當使用可以增加程式的開發效率
可變變數就是「把變數的名稱變成變數」,看起來頭很暈對吧哈哈
直接來看程式碼
<?php
$num1 = 100;
$numString = "num1";
echo ${$numString};//也可以寫成$$numString
?>
這段程式碼最後會輸出100
原因是$numString的值是num1,將$numString的值取出放進大括號中,程式就變成了。${num1}再把大括號拿掉就變成了$num1,而$num1的值就是100,所以最後輸出100這就是可變變數的特性與用法 -「把變數的名稱變成變數」,而${$numString}這樣的寫法也能把大括號拿掉直接寫$$numString,有沒有大括號都可以正常運作。
值通過使用可選的返回語句返回。可以返回包括數組和對象的任意類型。返回語句會立即中止函數的運行,並且將控製權交回調用該函數的代碼行。
<?php
function square($num)
{
return $num * $num;
}
echo square(4); // 输出 '16'。
?>
函數不能返回多個值,但可以通過返回一個數組來得到類似的效果。
<?php
function small_numbers()
{
return [0, 1, 2];
}
// 使用短数组语法将数组中的值赋给一组变量
[$zero, $one, $two] = small_numbers();
// 在 7.1.0 之前,唯一相等的选择是使用 list() 结构
list($zero, $one, $two) = small_numbers();
?>
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
連結串列是在許多程式語言中實現的常見資料結構。它是線性的,包含相互連結的節點。
每個節點都包含資料和到相鄰節點的連結。因此,連結串列形成了一個節點鏈。連結串列有不同的變體。
1.單連結串列:單向。它只在向前的方向上移動。
2.雙連結串列:是雙向的。它向前和向後兩個方向遍歷。
3.迴圈連結串列:單向迴圈。
4.迴圈雙向連結串列:雙向迴圈。
我們可以在連結串列中進行各種操作。基本操作如下:
1.遍歷
2.插入
3.刪除
4.更新
5.搜尋
PHP 提供了一個類 SplDoublyLinkedList 用於實現連結串列。它是一個雙向連結串列。
$list = new SplDoublyLinkedList();
$list->push(10);
$list->push(15);
$list->push(20);
displayList($list);
function displayList($list) {
for ($list->rewind(); $list->valid(); $list->next()){
echo $list->current()."<br>";
}
}
push() 方法接受要推送的引數並允許在列表中附加值。該元素將被推到連結串列的末尾。
rewind() 方法從連結串列的開頭回退迭代器。例如,迭代器將移動到列表的第一個元素。
valid() 方法檢查連結串列是否包含更多節點,next() 方法移動到連結串列的下一項。因此,我們可以在 for 迴圈中使用上述示例中的這些方法來遍歷連結串列的元素。
在迴圈內部,current( )方法表示當前元素。因此,將列印當前元素。使用 pop() 方法刪除連結串列中的元素
使用 pop() 方法刪除連結串列中的元素
我們可以使用 pop() 方法從連結串列中刪除最後一個元素。該方法不接受任何引數。
從連結列表中查詢頂部和底部值
我們可以使用 top() 方法找到連結串列的頂部值,對於底部值,我們可以使用 bottom() 方法
echo "top_element=".$list->top()."<br>";
echo "bottom_element=".$list->bottom();
使用 add() 方法在連結串列中插入值
我們可以使用 add() 方法通過指定位置在連結串列中插入元素。該方法有兩個引數。
第一個引數是要插入專案的索引,第二個引數是要插入的專案。例如,以 2 和 50 為引數呼叫 add() 方法並呼叫 displayList() 方法。
$list->add(2,50);
displayList($list);
PHP link.php
注意插入點會從第n個參數下插入
在 PHP 中,佇列可以使用陣列來實作。一個佇列就是一個先進先出的資料集合。我們可以在佇列的頭部插入數據,同時從佇列的尾部取出數據。
PHP queue.php
class Queue{
protected $queue=[];
//從尾部加入陣列
public function enqueue($item){
array_push($this->queue, $item);
}
//從頭部取出陣列
public function dequeue(){
if (empty($this->queue)){
return flase;
}
return array_shift($this->queue);
}
//獲取陣列的長度
public function length (){
return count($this->queue);
}
//判斷是否為空值
public function isEmpty(){
return empty($this->queue);
}
}
$queue=new Queue();
$queue->enqueue('a');
$queue->enqueue('b');
$queue->enqueue('c');
$length = $queue->length();
echo $length."<br>";
echo $queue->dequeue()."<br>";
echo $queue->dequeue()."<br>";
echo $queue->dequeue()."<br>";
使用函數
array_push() 在尾端加入陣列
— array_shift () 删除陣列中首個元素,并返回被删除元素的值。
— count() 計算陣列數量
— empty() 陣列是否為空
在PHP程式設計中,我們常常遇到需要計算字串長度的場景。一般情況下,我們習慣用 strlen() 函數或 mb_strlen() 函數來計算字串長度。然而,在處理中文字串時,我們會發現使用 strlen() 函數會出現問題,因為中文字元不按照一般的字元計算方式來計算長度。那麼在PHP中,如何才能正確計算中文字串的長度呢?下面就來探討一下相關的問題。
一、PHP中字串長度的計算方式
在PHP中,計算字串長度的方式有兩種,一種是簡單的字元計數,另一種是按照實際字元長度計算。在計算字串長度時,我們會遇到兩種情況:
1.ASCII字元:在計算ASCII字元的長度時,直接使用 strlen() 函數即可。
2.中文字元:中文字元在Unicode佔用兩個字節,而在GBK中佔用兩個位元組或三個位元組。在計算中文字元長度時,需要按照字元的實際長度來計算。
二、誤用strlen() 函數的問題
strlen() 函數是PHP中一個用來計算字串長度的基本函數,它可以傳回指定字串的長度。然而,在處理中文字串時,使用 strlen() 函數會出現問題,計算長度不準確。這是由於 PHP 預設採用 ASCII 編碼,而對於 Unicode 編碼的中文字符,一個字元被解析成多個字節,導致計算長度時發生錯誤。
三、解決問題的方法
既然 strlen() 函數無法正常計算中文字元的長度,那麼我們該如何計算中文字元的長度呢?以下就是三種常用的解決方案:
1.使用 mb_strlen() 函數
PHP提供了 mb_strlen() 函數來解決字串長度問題。 mb_strlen() 函數是一個多位元組字串長度函數,它可以傳回字串的實際長度,包括中文字元在內。使用mb_strlen() 函數計算中文字串的長度時,需要傳入第二個參數來指定字元編碼,例如:
$my_str="不要在你的智慧中夾雜著傲慢。不要使你的謙虛新缺乏智慧。";
$len=mb_strlen($my_str,'utf-8'); // len=27
2.使用iconv_strlen()函數
iconv_strlen() 函數可以用來計算字串的長度,它也可以正確處理中文字串的長度。 iconv_strlen() 函數結構類似strlen() 函數,只不過在計算長度時需要傳入第二個參數指定字元編碼,例如:
$my_str="不要在你的智慧中夾雜著傲慢。不要使你的謙虛新缺乏智慧。";
$len=iconv_strlen($my_str,'utf-8'); // len=27
3.計算位元組數再除以2 或3
除了使用PHP自帶的函數來處理之外,我們還可以透過計算中文字元的位元組數來解決長度計算問題。
function mb_str_split($str){
return preg_split('/(?<!^)(?!$)/u',$str);
}
floor — 捨去法取整數
語法:
floor(int|float $num): float
程式裡常常會出現陣列,不管是一維、二維、多維陣列,每每遇到陣列,我總是搞不清楚什麼是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 4, PHP 5, PHP 7, PHP 8)
sprintf — 返回格式化字符串
sprintf(string $format, mixed …$values): string
符號表示
S 以字串方式顯示
d以整數方式顯示
<?php
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
?>
以上範例會输出:
There are 5 monkeys in the tree
sizeof — count() 的别名
參數
數值或變數
返回值: int
If your array is "huge"
It is reccomended to set a variable first for this case:
THIS->
$max = sizeof($huge_array);
for($i = 0; $i < $max;$i++)
{
code...
}