php中foreach怎么遍历数组_phpforeach遍历多维数组方法

答案:PHP中foreach用于遍历数组,支持获取键值或仅值,可嵌套遍历多维数组,结合is_array实现递归遍历,注意引用修改和空数组不执行循环体。

在PHP中,foreach 是遍历数组最常用的方式之一,特别适合处理索引数组和关联数组。它能自动遍历数组中的每一个元素,无需手动控制键名或下标。下面介绍如何使用 foreach 遍历普通数组以及多维数组。

1. foreach 遍历一维数组

foreach 支持两种语法格式:

  • 获取值: foreach($array as $value)
  • 同时获取键和值: foreach($array as $key => $value)

示例:遍历索引数组

$fruits = ['apple', 'banana', 'orange'];
foreach ($fruits as $fruit) {
  echo $fruit . "
";
}

输出:
apple
banana
orange

示例:遍历关联数组(获取键和值)

$user = [
  'name' => 'Tom',
  'age' => 25,
  'city' => 'Beijing'
];

foreach ($user as $key => $value) {
  echo "$key: $value
";
}

输出:
name: Tom
age: 25
city: Beijing

2. foreach 遍历多维数组

当数组中包含子数组(即多维数组)时,可以通过嵌套 foreach 来逐层遍历。

示例:二维关联数组

$students = [
  'stu1' => ['name' => 'Alice', 'score' => 95],
  'stu2' => ['name' => 'Bob', 'score' => 87],
  'stu3' => ['name' => 'Charlie', 'score' => 90]
];

foreach ($students as $id => $info) {
  echo "ID: $id
";
  foreach ($info as $key => $value) {
    echo "  $key: $value
";
  }
  echo "
";
}

输出:
ID: stu1
  name: Alice
  score: 95


ID: stu2
  name: Bob
  score: 87

...

3. 遍历更深层数组(三维及以上)

对于三层或更深的数组,继续嵌套 foreach 即可。也可以结合 is_array() 判断类型,实现通用递归遍历。

递归遍历任意维度数组示例:

function deepForeach($array, $depth = 0) {
  $indent = str_repeat(" ", $depth * 4); // 缩进显示层级
  foreach ($array as $key => $value) {
    if (is_array($value)) {
      echo "$indent$key:
";
      deepForeach($value, $depth + 1);
    } else {
      echo "$indent$key: $value
";
    }
  }
}

// 使用示例
$data = [
  'level1' => [
    'level2' => [
      'name' => 'Test',
      'val' => 100
    ]
  ]
];
deepForeach($data);

注意事项

  • foreach 遍历的是数组的副本,直接修改 $value 不会影响原数组。如需修改原数组,应使用引用方式:foreach ($arr as &$value)
  • 使用引用后记得 unset($value),避免后续操作出错
  • 空数组不会触发 foreach 循环体执行

基本上就这些。foreach 简洁明了,配合嵌套或递归,能高效处理各种数组结构。