一、空字符串 == 0
1、需求
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 (
0 => '姓名1',
1 => '姓名2',
2 => '姓名3',
'a' => '年齡1',
'b' => '年齡100',
'c' => '年齡3',
3 => '哈哈99',
'd' => '哈哈2',
)
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、直接引用大佬的文章
- PHP 的 empty 和 isset 對比 去看看