在 PHP 中,二维数组是一个数组的数组,即数组中的每个元素也是一个数组。你可以通过多种方式定义二维数组。以下是几种常见的方法:
你可以直接在代码中定义一个二维数组:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
array()
函数定义二维数组你也可以使用 array()
函数来定义二维数组:
$array = array(
array(1, 2, 3),
array(4, 5, 6),
array(7, 8, 9)
);
你可以先定义一个空数组,然后动态地向其中添加元素:
$array = [];
$array[0] = [1, 2, 3];
$array[1] = [4, 5, 6];
$array[2] = [7, 8, 9];
你也可以使用循环来生成二维数组:
$array = [];
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
$array[$i][$j] = $i * 3 + $j + 1;
}
}
你可以通过索引访问二维数组中的元素:
echo $array[0][1]; // 输出 2
echo $array[2][2]; // 输出 9
你可以使用嵌套的 foreach
循环来遍历二维数组:
foreach ($array as $row) {
foreach ($row as $value) {
echo $value . " ";
}
echo "\n";
}
array_push()
添加元素你还可以使用 array_push()
函数向二维数组中添加元素:
$array = [];
array_push($array, [1, 2, 3]);
array_push($array, [4, 5, 6]);
array_push($array, [7, 8, 9]);
array_fill()
初始化二维数组你可以使用 array_fill()
函数来初始化一个二维数组:
$array = array_fill(0, 3, array_fill(0, 3, 0));
这将创建一个 3x3 的二维数组,所有元素初始值为 0。
array_map()
处理二维数组你可以使用 array_map()
函数对二维数组中的每个元素进行处理:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$array = array_map(function($row) {
return array_map(function($value) {
return $value * 2;
}, $row);
}, $array);
这将使二维数组中的每个元素都乘以 2。
array_column()
提取二维数组中的某一列你可以使用 array_column()
函数提取二维数组中的某一列:
$array = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
$names = array_column($array, 'name');
这将提取出 name
列,结果为 ['Alice', 'Bob', 'Charlie']
。
array_walk()
遍历二维数组你可以使用 array_walk()
函数遍历二维数组:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
array_walk($array, function(&$row) {
array_walk($row, function(&$value) {
$value *= 2;
});
});
这将使二维数组中的每个元素都乘以 2。
array_reduce()
对二维数组进行归约你可以使用 array_reduce()
函数对二维数组进行归约操作:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$sum = array_reduce($array, function($carry, $row) {
return $carry + array_sum($row);
}, 0);
这将计算二维数组中所有元素的总和。
array_filter()
过滤二维数组你可以使用 array_filter()
函数过滤二维数组:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$filtered = array_filter($array, function($row) {
return array_sum($row) > 10;
});
这将过滤出总和大于 10 的行。
array_merge()
合并二维数组你可以使用 array_merge()
函数合并两个二维数组:
$array1 = [
[1, 2, 3],
[4, 5, 6]
];
$array2 = [
[7, 8, 9],
[10, 11, 12]
];
$merged = array_merge($array1, $array2);
这将合并两个二维数组。
array_slice()
截取二维数组你可以使用 array_slice()
函数截取二维数组的一部分:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$slice = array_slice($array, 1, 2);
这将截取从索引 1 开始的 2 行。
array_chunk()
将二维数组分块你可以使用 array_chunk()
函数将二维数组分块:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$chunks = array_chunk($array, 2);
这将把二维数组分成每块 2 行的数组。
array_keys()
获取二维数组的键你可以使用 array_keys()
函数获取二维数组的键:
$array = [
'a' => [1, 2, 3],
'b' => [4, 5, 6],
'c' => [7, 8, 9]
];
$keys = array_keys($array);
这将获取二维数组的键 ['a', 'b', 'c']
。
array_values()
获取二维数组的值你可以使用 array_values()
函数获取二维数组的值:
$array = [
'a' => [1, 2, 3],
'b' => [4, 5, 6],
'c' => [7, 8, 9]
];
$values = array_values($array);
这将获取二维数组的值 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
。
array_replace()
替换二维数组你可以使用 array_replace()
函数替换二维数组中的元素:
$array1 = [
[1, 2, 3],
[4, 5, 6]
];
$array2 = [
[7, 8, 9],
[10, 11, 12]
];
$replaced = array_replace($array1, $array2);
这将用 array2
替换 array1
中的元素。
array_intersect()
获取二维数组的交集你可以使用 array_intersect()
函数获取两个二维数组的交集:
$array1 = [
[1, 2, 3],
[4, 5, 6]
];
$array2 = [
[1, 2, 3],
[7, 8, 9]
];
$intersect = array_intersect($array1, $array2);
这将获取两个二维数组的交集 [[1, 2, 3]]
。
array_diff()
获取二维数组的差集你可以使用 array_diff()
函数获取两个二维数组的差集:
$array1 = [
[1, 2, 3],
[4, 5, 6]
];
$array2 = [
[1, 2, 3],
[7, 8, 9]
];
$diff = array_diff($array1, $array2);
这将获取两个二维数组的差集 [[4, 5, 6]]
。
array_unique()
去除二维数组中的重复元素你可以使用 array_unique()
函数去除二维数组中的重复元素:
$array = [
[1, 2, 3],
[4, 5, 6],
[1, 2, 3]
];
$unique = array_unique($array, SORT_REGULAR);
这将去除二维数组中的重复元素 [[1, 2, 3], [4, 5, 6]]
。
array_flip()
交换二维数组的键和值你可以使用 array_flip()
函数交换二维数组的键和值:
$array = [
'a' => [1, 2, 3],
'b' => [4, 5, 6],
'c' => [7, 8, 9]
];
$flipped = array_flip($array);
这将交换二维数组的键和值。
array_reverse()
反转二维数组你可以使用 array_reverse()
函数反转二维数组:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$reversed = array_reverse($array);
这将反转二维数组。
array_shift()
移除二维数组的第一个元素你可以使用 array_shift()
函数移除二维数组的第一个元素:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$first = array_shift($array);
这将移除二维数组的第一个元素 [1, 2, 3]
。
array_pop()
移除二维数组的最后一个元素你可以使用 array_pop()
函数移除二维数组的最后一个元素:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$last = array_pop($array);
这将移除二维数组的最后一个元素 [7, 8, 9]
。
array_unshift()
在二维数组的开头插入元素你可以使用 array_unshift()
函数在二维数组的开头插入元素:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
array_unshift($array, [0, 0, 0]);
这将在二维数组的开头插入元素 [0, 0, 0]
。
array_push()
在二维数组的末尾插入元素你可以使用 array_push()
函数在二维数组的末尾插入元素:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
array_push($array, [10, 11, 12]);
这将在二维数组的末尾插入元素 [10, 11, 12]
。
array_splice()
替换二维数组中的元素你可以使用 array_splice()
函数替换二维数组中的元素:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
array_splice($array, 1, 1, [[10, 11, 12]]);
这将替换二维数组中的第二个元素 [4, 5, 6]
为 [10, 11, 12]
。
array_combine()
将两个数组合并为一个二维数组你可以使用 array_combine()
函数将两个数组合并为一个二维数组:
$keys = ['a', 'b', 'c'];
$values = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$combined = array_combine($keys, $values);
这将合并两个数组为一个二维数组 ['a' => [1, 2, 3], 'b' => [4, 5, 6], 'c' => [7, 8, 9]]
。
array_fill_keys()
创建一个键为指定值的二维数组你可以使用 array_fill_keys()
函数创建一个键为指定值的二维数组:
$keys = ['a', 'b', 'c'];
$value = [1, 2, 3];
$filled = array_fill_keys($keys, $value);
这将创建一个二维数组 ['a' => [1, 2, 3], 'b' => [1, 2, 3], 'c' => [1, 2, 3]]
。
array_map()
对二维数组的每个元素应用回调函数你可以使用 array_map()
函数对二维数组的每个元素应用回调函数:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
$mapped = array_map(function($row) {
return array_map(function($value) {
return $value * 2;
}, $row);
}, $array);
这将使二维数组中的每个元素都乘以 2。
array_walk_recursive()
递归遍历二维数组你可以使用 array_walk_recursive()
函数递归遍历二维数组:
$array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
array_walk_recursive($array, function(&$value) {
$value *= 2;
});
这将使二维数组中的每个元素都乘以 2。
array_udiff()
使用自定义函数比较二维数组的差集你可以使用 array_udiff()
函数使用自定义函数比较二维数组的差集:
$array1 = [
[1, 2, 3],
[4, 5, 6]
];
$array2 = [
[1, 2, 3],
[7, 8, 9]
];
$diff = array_udiff($array1, $array2, function($a, $b) {
return array_sum($a) - array_sum($b);
});
这将使用自定义函数比较二维数组的差集。
array_uintersect()
使用自定义函数比较二维数组的交集你可以使用 array_uintersect()
函数使用自定义函数比较二维数组的交集:
$array1 = [
[1, 2, 3],
[4, 5, 6]
];
$array2 = [
[1, 2, 3],
[7, 8, 9]
];
$intersect = array_uintersect($array1, $array2, function($a, $b) {
return array_sum($a) - array_sum($b);
});
这将使用自定义函数比较二维数组的交集。
array_multisort()
对二维数组进行排序你可以使用 array_multisort()
函数对二维数组进行排序:
$array = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30],
['name' => 'Charlie', 'age' => 20]
];
array_multisort(array_column($array, 'age'), SORT_ASC, $array);
这将根据 age
列对二维数组进行升序排序。
uasort()
使用自定义函数对二维数组进行排序你可以使用 uasort()
函数使用自定义函数对二维数组进行排序:
$array = [
['name' => 'Alice', 'age' => 25],
['name' => 'Bob', 'age' => 30],
['name' => 'Charlie', 'age' => 20]
];
uasort($array, function($a, $b) {
return $a['age'] - $b['age'];
});
这将根据 age
列对二维数组进行升序排序。
uksort()
使用自定义函数对二维数组的键进行排序你可以使用 uksort()
函数使用自定义函数对二维数组的键进行排序:
$array = [
'c' => [1, 2, 3],
'a' => [4, 5, 6],
'b' => [7, 8, 9]
];
uksort($array, function($a, $b) {
return strcmp($a, $b);
});
这将根据键