PHP中的細節問題

一、空字符串 == 0

1、需求

  • 獲取 other = 0 的 name。

2、代碼

	public function test(){
        $data = [
            [ 'name' => '姓名1', 'other' => 0, 'value' => 1 ],
            [ 'name' => '姓名2', 'other' => '', 'value' => 2 ],
            [ 'name' => '姓名3', 'other' => 1, 'value' => 3 ],
            [ 'name' => '姓名4', 'other' => 0, 'value' => 4 ],
        ];

        $name = [];
        foreach ($data as $value){
            if ($value['other'] == 0){
                $name[] = $value['name'];
            }
        }
        var_export($name);
        die();
    }

3、打印

array (
  0 => '姓名1',
  1 => '姓名2',
  2 => '姓名4',
)

4、分析

  • 很明顯姓名2不滿足條件,但結果裏卻有姓名2
  • 可以用全等 ===判斷
  • 寫完之後一定要測試,有的時候執行的結果並不是我們預計的結果

二、引用傳遞的函數不能傳值,只能傳變量名

1、需求

  • 打亂數組排序

2、正確代碼

	public function test(){
        $array = [1, 2, 3, 4];
        shuffle($array);
        var_export($array);
    }

3、錯誤代碼

	public function test(){
        shuffle([1, 2, 3, 4]);
        var_export($array);
    }
  • 報錯:Fatal error: Cannot pass parameter 1 by reference
  • 這裏直接傳[1,2,3,4],$array都沒定義,打印個毛線,當然會報錯了

三、經典問題:intval(0.58 * 100) = 57

1、引用

四、array+array與array_merge()的區別

1、需求

  • 多個數組合並操作

2、代碼

public function test(){
        $array1 = [ 1 => '姓名1', 2 => '姓名2', 3 => '姓名3' ];
        $array2 = [ 'a' => '年齡1', 'b' => '年齡2', 'b' => '年齡100','c' => '年齡3' ];
        $array3 = [ 4 => '哈哈1', 4 => '哈哈99','d' => '哈哈2' ];
        $array = array_merge($array1, $array2, $array3);
        $addArray = $array1 + $array2 + $array3;
        var_export($array);
        var_export($addArray);
    }

3、打印

  • $array 打印
array (
  0 => '姓名1',
  1 => '姓名2',
  2 => '姓名3',
  'a' => '年齡1',
  'b' => '年齡100',
  'c' => '年齡3',
  3 => '哈哈99',
  'd' => '哈哈2',
)
  • $addArray 打印
array (
  1 => '姓名1',
  2 => '姓名2',
  3 => '姓名3',
  'a' => '年齡1',
  'b' => '年齡100',
  'c' => '年齡3',
  4 => '哈哈99',
  'd' => '哈哈2',
)

4、結論

  • array_merge
    • 數字索引鍵會重置字符串索引鍵不會重置
    • 如果有重複索引,則只保留重複索引的最後一個值
  • array + array
    • 保留合併前的索引,即索引不重置
    • 如果有重複索引,則只保留重複索引的最後一個值

五、empty 和 isset 對比

1、直接引用大佬的文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章