文章目錄
- foreach
- 基礎語法:
- 案例1:
- 引用傳遞模式:
- 嵌套數組處理:
- 避免在循環中計算數組長度:
- 使用引用減少內存拷貝:
- 打印數組
- in_array
- 基礎使用
- 嚴格使用
foreach
基礎語法:
foreach ($iterable as $value) {
// 循環體
}
foreach ($iterable as $key => $value) {
// 循環體
}
案例1:
$fruits = ["a" => "Apple", "b" => "Banana", "c" => "Cherry"];foreach ($fruits as $key => $value) {echo "$key: $value\n";
}
輸出:
a: Apple
b: Banana
c: Cherry
引用傳遞模式:
$numbers = [1, 2, 3];foreach ($numbers as &$num) {$num *= 2; // 直接修改原數組
}print_r($numbers); // 輸出 [2, 4, 6]// 重要:必須 unset 引用變量
unset($num);
嵌套數組處理:
$matrix = [[1, 2],[3, 4],[5, 6]
];foreach ($matrix as $row) {foreach ($row as $cell) {echo $cell . " ";}echo "\n";
}
// 輸出:
// 1 2
// 3 4
// 5 6
避免在循環中計算數組長度:
// 低效(每次循環都計算 count())
for ($i=0; $i<count($array); $i++) { /* ... */ }// 高效(只計算一次)
$length = count($array);
for ($i=0; $i<$length; $i++) { /* ... */ }// 最佳(foreach 自動處理)
foreach ($array as $value) { /* ... */ }
使用引用減少內存拷貝:
$largeArray = range(1, 100000);// 低效(創建值拷貝)
foreach ($largeArray as $value) { /* ... */ }// 高效(直接操作原數據)
foreach ($largeArray as &$value) { /* ... */ }
實戰:
修改數組結構:
$colors = ['red', 'green', 'blue'];
foreach ($colors as $key => $color) {if ($color === 'green') {unset($colors[$key]); // 危險操作!}
}
// 解決方案:先收集要刪除的鍵
$toDelete = [];
foreach ($colors as $key => $color) {if ($color === 'green') $toDelete[] = $key;
}
foreach ($toDelete as $key) {unset($colors[$key]);
}
打印數組
// 創建 1-10 的連續數組
$numbers = range(1, 10);// 使用 foreach 遍歷打印
foreach ($numbers as $number) {//使用`.`操作符連接字符串時,PHP會自動將非字符串的值轉換為字符串echo $number . "\n";}輸出結果:
1
2
3
4
5
6
7
8
9
10
方法2:
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];foreach ($numbers as $num) {echo $num . PHP_EOL; // PHP_EOL 是跨平臺的換行符
}
動態生成數組
// 使用循環創建數組
$numbers = [];
for ($i = 1; $i <= 10; $i++) {$numbers[] = $i; // 將數字添加到數組末尾
}// 打印結果
foreach ($numbers as $index => $value) {echo "索引 {$index} 的值是: {$value}\n";
}
索引 0 的值是: 1
索引 1 的值是: 2
索引 2 的值是: 3
索引 3 的值是: 4
索引 4 的值是: 5
索引 5 的值是: 6
索引 6 的值是: 7
索引 7 的值是: 8
索引 8 的值是: 9
索引 9 的值是: 10
單行打印:
$numbers = range(1, 10);foreach ($numbers as $number) {echo $number . " "; // 用空格分隔
}// 輸出: 1 2 3 4 5 6 7 8 9 10
in_array
bool in_array(mixed $needle, array $haystack [, bool $strict = false])
-
$needle:要搜索的值(任意類型)。
-
$haystack:被搜索的數組。
-
$strict(可選):是否啟用嚴格模式(默認 false)。若為 true,則同時比較值和類型。
-
返回值:
找到值返回 true,否則返回 false。
基礎使用
$arr = [1, 2, "3", "apple"];var_dump(in_array(2, $arr)); // true(數字2存在)
var_dump(in_array("2", $arr)); // true(字符串"2"被轉換為數字2)
var_dump(in_array("apple", $arr)); // true(字符串存在)
var_dump(in_array("banana", $arr));// false
嚴格使用
$arr = [1, 2, "3", "apple"];var_dump(in_array("2", $arr, true)); // false(類型不同)
var_dump(in_array("3", $arr, true)); // true(值+類型匹配)
var_dump(in_array(3, $arr, true)); // false(數字3 ≠ 字符串"3")