> 技术文档 > php语法--foreach和in_array的使用

php语法--foreach和in_array的使用


文章目录

      • 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: Appleb: Bananac: 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\"; }输出结果:12345678910

方法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\")